快速排序

  1. void quick_sort(int q[], int l, int r)
  2. {
  3. if (l >= r) return; // 判边界
  4. int i = l - 1, j = r + 1, x = q[(l + r)/2]; // 取分界点 x,和两个指针
  5. while (i < j) // 每次交换迭代
  6. {
  7. do i ++ ; while (q[i] < x);
  8. do j -- ; while (q[j] > x);
  9. if (i < j){
  10. int temp = q[i];
  11. q[i] = q[j];
  12. q[j] = temp;
  13. }
  14. }
  15. quick_sort(q, l, j),;
  16. quick_sort(q, j + 1, r);
  17. }

归并排序

  1. int[] temp;//临时数组
  2. void merge_sort(int q[], int l, int r)
  3. {
  4. if (l >= r) return;
  5. int mid = (l + r)/2;
  6. merge_sort(q, l, mid);
  7. merge_sort(q, mid + 1, r);
  8. int k = 0, i = l, j = mid + 1;
  9. while (i <= mid && j <= r){
  10. if (q[i] <= q[j])
  11. tmp[k ++ ] = q[i ++ ];
  12. else
  13. tmp[k ++ ] = q[j ++ ];
  14. }
  15. while (i <= mid) tmp[k ++ ] = q[i ++ ];
  16. while (j <= r) tmp[k ++ ] = q[j ++ ];
  17. for (i = l, j = 0; i <= r; i ++, j ++ ) q[i] = tmp[j];
  18. }