归并排序
基本思想:将数组A[0 … n-1]中的元素分成两个子数组A1[0 … n/2]和A2[n/2+1 … n-1]。分别对这两个子数组单独排序,然后将一排序的两个子数组归并成一个含有n个元素的有序数组。
归并排序包含不相邻元素的比较,但并不会直接交换。在合并两个已排序的数组时,如果遇到了相同的元素,只要保证前半部分数组优先于后半部分数组,相同元素的顺序就不会颠倒,所以归并排序属于稳定的非线性的排序算法。
归并排序算法虽然高效且稳定,但在处理过程中除了用于保存输入数据的数组外,还要临时占用一部分的内存空间。
归并排序是个原地的排序,空间可以为O(1)
1、时间复杂度
算法的递推关系:
若n=2k,则有
若2k<n<2k+1,
则时间复杂度为:T(n)=O(nlogn)
2、代码实现
const int maxn=100;
int temp[maxn];
void MergeSort(int *a,int low,int high)
{
if(low>=high)//代码段①