//插入排序 void InsertionSort(int a[], int n) { int i, j, t; for(i = 1; i < n; i++) { t = a[i]; for(j = i; j > 0 && a[j - 1] > t; j--) a[j] = a[j - 1]; a[j] = t; } } template <typename T> void swap(T *x, T *y) { T temp; temp = *x; *x = *y; *y = temp; } //三数中值分割方法 int Median3(int a[], int l, int r) { int c = (l + r) / 2; if(a[l] > a[c]) swap(&a[l], &a[c]); if(a[l] > a[r]) swap(&a[l], &a[r]); if(a[c] > a[r]) swap(&a[c], &a[r]); swap(&a[c], &a[r - 1]); return a[r - 1]; } //快速排序主例程 void Qsort(int a[], int l, int r) { int i, j, p; if(l + 3 <= r) { p = Median3(a, l, r); i = l; j = r - 1; for(;;) { while(a[++i] < p){} while(a[--j] > p){} if(i < j) swap(&a[i], &a[j]); else break; } swap(&a[i], &a[r - 1]); Qsort(a, l, i - 1); Qsort(a, i + 1, r); } else InsertionSort(a + l, r - l + 1); }