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
}