1. 算法描述
归并排序是将两个或两个以上的有序表合并成一个新的有序表。
2. 算法代码:
/**
* 归并排序
**/
func MergeSort(data []int) {
count := len(data)
if count <= 1 {
return
}
mid := count / 2
MergeSort(data[0:mid])
MergeSort(data[mid:count])
p1, p2 := 0, mid
var newData []int
for p1 < mid && p2 < count {
if data[p1] <= data[p2] {
newData = append(newData, data[p1])
p1++
} else {
newData = append(newData, data[p2])
p2++
}
}
var start, end int
if p1 < mid {
start = p1
end = mid
} else {
start = p2
end = count
}
for i := start; i < end; i++ {
newData = append(newData, data[i])
}
for i := 0; i < count; i++ {
data[i] = newData[i]
}
}
3. 时间复杂度:O(n*logn)
4. 空间复杂度:O(n)
5. 稳定性:稳定