时间复杂度为O(nlogn) 这是该算法中最好、最坏和平均的时间性能。空间复杂度为 O(n)比较操作的次数介于(nlogn) / 2和nlogn - n + 1。赋值操作的次数是(2nlogn)。归并算法的空间复杂度为:0 (n)归并 排序比较占用内存,但却是一种效率高且稳定的算法。定义所谓归并 排序是指将两个或两个以上有序的数列(或有序表),合并成一个仍然有序的数列(或有序表)。这样的排序方法经常用于多个有序的数据文件归并成一个有序的数据文件。归并排序的算法比较简单。基本思想方法:(1)假设已经有两个有序数列,分别存放在两个 数组s,r中;并设i,j分别为指向数组的第一个单元的下标;s有n个元素,r有m个元素。(2)再另设一个数组a,k指向该数组的第一个单元下标。(3)算法分析(过程):proceduremerge(s,r,a,i,j,k); begin i1:=i; j1:=j; k1:=k; while(i1 void Merge(int r[], int r1[], int s, int m, int t) { int i = s; int j = m + 1; int k = s; while (i <= m && j <= t) { if (r[i] <= r[j]) r1[k++] = r[i++]; else r1[k++] = r[j++]; } if (i <= m) while (i <= m) r1[k++] = r[i++]; else while (j <= t) r1[k++] = r[j++]; for (int n = s; n <= t; n++) r[n] = r1[n]; } void MergeSort(int r[], int r1[], int s, int t) { if (s < t) { int m = (s + t) / 2; MergeSort(r, r1, s, m); MergeSort(r, r1, m + 1, t); Merge(r, r1, s, m, t); } } int main() { int r = {10, 3, 5, 1, 9, 34, 54, 565}, r1; MergeSort(r, r1, 0, 7); for (int q = 0; q < 8; q++) std::cout << r[q] << std::ends; return 0; }归并排序的实现方法:#include #include voidMerge(int*a,intlow,intmid,inthigh) { inti=low,j=mid+1,k=0; int*temp=(int*)malloc((high-low+1)*sizeof(int)); while(i<=mid&&j<=high) a[i]<=a[j]?(temp[k++]=a[i++]):(temp[k++]=a[j++]); while(i<=mid) temp[k++]=a[i++]; while(j<=high) temp[k++]=a[j++]; memcpy(a+low,temp,(high-low+1)*sizeof(int)); free(temp); } voidMergeSort(int*a,intn) { intlength; for(length=1;length>n; int*data=new int[n]; if(!data) exit(1); intk=n; while(k--) { cin>>data[n-k-1]; } clock_ts=clock(); MergeSort(data,n); clock_te=clock(); k=n; while(k--) { cout<