排序 归并排序
归并排序相对 快速排序 来说是比较容易写的。代码很简单,甚至比插入排序,冒泡排序等等还容易写
/* * CreateTime: 2014-09-14 09:49:11 */ #include <stdio.h> void msort(int l, int r); void merge(int l, int mid, int r); int a[10] = { 177, 198, 9, 117, 78, 92, 122, 98, 136, 130 }; int aux[10]; int main(void) { msort(0, 9); for(int i = 0; i < 10; ++i) { printf("%d ", a[i]); } printf("\n"); return 0; } void msort(int l, int r) { if(l < r) { int mid = l + (r - l) / 2; // int mid = (r + l) / 2; msort(l, mid); msort(mid+1, r); merge(l, mid, r); } } void merge(int l, int mid, int r) { int i = l; int j = mid + 1; for(int t = l; t <= r; t++) { aux[t] = a[t]; } for(int t = l; t <= r; t++) { if(i > mid) { // l side is full a[t] = aux[j++]; } else if(j > r) { // r side is full a[t] = aux[i++]; } else if(aux[i] < aux[j]) { a[t] = aux[i++]; } else if(aux[i] >= aux[j]){ a[t] = aux[j++]; } } }