上一个排序随笔中分析了三种时间复杂度为O(n2)的排序算法,它们适合小规模数据的排序;这次我们试着分析时间复杂为O(nlogn)的排序算法,它们比较适合大规模的数据排序。
1 归并排序
1.1 原理
将待排序列划分为前后两部分,直到子序列的区间长度为1;对前后两部分分别进行排序,再将排好序的两部分合并在一起。
1.2 实现
1 static void Merge(ElemType* pElem, int p, int q, int r) //特别注意这个数组的细节问题 2 { 3 ElemType* temp = new ElemType[r - p + 1]; //临时数组 4 int i = p, j = q + 1, k = 0; 5 6 while (i <= q && j <= r) //合并有序子序列 7 { 8 if (pElem[i] <= pElem[j]) 9 temp[k++] = pElem[i++]; 10 else 11 temp[k++] = pElem[j++]; 12 } 13 while (i <= q) 14 temp[k++] = pElem[i++]; 15 while (j <= r) 16 temp[k++] = pElem[j++]; 17 18 for (k =