归并排序
归并排序:
顾名思义,就是将要排序的一串数一分为二,递归的去排序左边和右边的数,最终合并到一起,以从小到大排序为例
参考代码:
1 // Merge sort 2 #include <iostream> 3 using namespace std; 4 void mergenum(int a[], int tmp[], int l, int mid, int r) 5 { 6 int i = l, j = mid+1, cnt = 0; 7 while(i <= mid && j <= r) 8 { 9 if(a[i] < a[j]) tmp[cnt++] = a[i++]; 10 else tmp[cnt++] = a[j++]; 11 } 12 while(i <= mid) tmp[cnt++] = a[i++]; 13 while(j <= r) tmp[cnt++] = a[j++]; // 两个循环将剩余数加入到临时数组里 14 for(int k = l,t = 0; k <= r; k++,t++) a[k] = tmp[t]; // 临时数组放入初始数组里 15 } 16 void msort(int a[], int tmp[], int l, int r) 17 { 18 if(l >= r) return; 19 int mid = (r-l)/2+l; 20 msort(a, tmp, l, mid); // 分割左边 21 msort(a, tmp, mid+1, r); // 分割右边 22 mergenum(a, tmp, l, mid, r); // 合并 23 } 24 void merge_sort(int a[], int n) 25 { 26 int tmp[n]; 27 for(int i = 0; i < n; i++) tmp[i] = 0; // 提前创建一个临时数组,节省空间(据说是这样) 28 msort(a,tmp,0,n-1); 29 } 30 int main() 31 { 32 int a[] = {10,2,1,5,4,3,9,7,6,8}; 33 const int n = 10; 34 merge_sort(a,n); 35 for(int i = 0; i < n; i++) cout << a[i] << " "; 36 return 0; 37 }

浙公网安备 33010602011771号