两种时间复杂度都是O(nlogn)的排序算法:归并排序和快速排序。
1.归并排序
1.1 归并排序的原理
归并排序的核心思想是:将一个要排序的数组,从中间分成前后两个部分,然后对前后两部分分别排序,再将排序好的两部分合并在一起,这样整个数据就是有序的了。
归并排序用到的就是一个分治思想。分治就是一种将大问题分解成小的子问题来解决的思想。分治思想跟递归思想很相像,分治是一种解决问题的处理思想,而递归是一种编程技巧。归并排序的分治思想可以用递归来实现。
1.2 用递归代码来实现归并排序
// 归并排序伪代码,A是数组,n表示数组的大小
merge_sort(A, n){
merge_sort_c(A,0,n-1)
}
// 递归调用函数
merge_sort_c(A, p, r) {
// 递归终止条件
if p>=r then return;
// 取p到r之间的中间位置q
q = (p+r)/2
// 分治递归
merge_sort_c(A, p, q)
merge_sort_c(A, q+1, r)
// 将A[p...q]和A[q+1...r]合并为A[P...r]
merge(A[P...r],A[p...q],A[q+1...r])
}