Golang归并排序
归并排序的思想比较好理解,是典型的Devide&Conquer,将一个大的数组通过二分,不断拆成小数组,将所有小数组排序后进行合并,就得到了最终的有序数组
func mergeSort(nums []int) []int {
length := len(nums)
if length < 2 {
return nums
}
left := nums[:length/2]
right := nums[length/2:]
return merge(mergeSort(left), mergeSort(right))
}
func merge(left, right []int) []int {
var res []int
for len(left) != 0 && len(right) != 0 {
if left[0] <= right[0] {
res = append(res, left[0])
left = left[1:]
} else {
res = append(res, right[0])
right = right[1:]
}
}
for len(left) != 0 {
res = append(res, left[0])
left = left[1:]
}
for len(right) != 0 {
res = append(res, right[0])
right = right[1:]
}
return res
}