合并排序
合并排序的思路是:把数组分成两部分,分别进行排序,再把排好序的两部分合并成排序数组。合并排序对一个n个元素的数组排序所需时间是O(nlogn)。用合并排序排序{9, 4, 5, 2, 1, 7, 4, 6}过程如下:
算法C++实现:
1 //对n个数进行合并排序 2 void Merge(int A[], int low, int mid, int high) 3 { 4 int B[];//辅助数组 5 int s = low , t = mid + 1 , k = low; 6 7 //将小元素添加到辅助数组 8 while( s<=mid && t<=high ) 9 { 10 if(A[s]<=A[t]) 11 { 12 B[k] = A[s]; 13 s = s + 1; 14 } 15 else 16 { 17 B[k] = A[t]; 18 t = t + 1; 19 } 20 k = k + 1; 21 } 22 23 if(s == mid + 1) 24 { 25 //把A[t...high]中剩余的元素复制到B数组 26 for(int i = k ; i <= high ; i++) 27 B[i] = A[t++]; 28 } 29 else 30 { 31 //把A[s...mid]中剩余的元素复制到B数组 32 for(int i = k ; i <= high ; i++) 33 B[i] = A[s++]; 34 } 35 36 //把B数组复制到A数组 37 for(int j = low ; j <= high ; j++) 38 A[j] = B[j]; 39 } 40 41 void mergesort(int A[] , int low ,int high) 42 { 43 if(low < high) 44 { 45 //把数组分成两部分分别排序在合并 46 int mid = (low+high)/2; 47 mergesort(A , low , mid); 48 mergesort(A , mid+1 , high); 49 Merge(A , low , mid , high); 50 } 51 }