归并排序

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. 稳定性:稳定

原文地址:https://www.cnblogs.com/wujuntian/p/12311423.html