分治法:-归并排序(1)
View Code
#include<iostream> using namespace std; void MergeArray(int a[], int first, int mid, int last, int temp[]) { int i = first, j = mid+1; int m = mid, n = last; int k = 0; while(i <= m && j <= n) { if(a[i] < a[j]) temp[k++] = a[i++]; else temp[k++] = a[j++]; } while(i <= m) temp[k++] = a[i++]; while(j <= n) temp[k++] = a[j++]; for(i = 0; i < k; i++) a[first+i] = temp[i]; } void mergesort(int a[], int first, int last, int temp[]) { if(first < last) { int mid = (first + last)/2; mergesort(a, first, mid, temp);//左边排序 mergesort(a, mid+1, last, temp);//右边排序 MergeArray(a, first, mid, last, temp);//合并 } } int main() { int a[]={5,3,2,6,1,5,4,8}; int temp[100]; mergesort(a, 0, 8, temp); for(int i=0; i < 8; i++) cout<<a[i]<<" "; return 0; }
HINT
归并排序的效率是比较高的,设数列长为N,将数列分开成小数列一共要logN步,每步都是一个合并有序数列的过程,时间复杂度可以记为O(N),故一共为O(N*logN)。因为归并排序每次都是在相邻的数据中进行操作,所以归并排序在O(N*logN)的几种排序方法(快速排序,归并排序,希尔排序,堆排序)也是效率比较高的

浙公网安备 33010602011771号