快速排序

基于分治
先快排再递归
image.png
暴力解法
image.png
快排代码模板

  1. #include <iostream>
  2. using namespace std;
  3. const int N = 1e6 + 10;
  4. int n;
  5. int q[N];
  6. void quick_sort(int q[], int l, int r)
  7. {
  8. if(l >= r) return;
  9. int x = q[l + r >> 1], i = l - 1, j = r + 1;
  10. while(i < j)
  11. {
  12. do i ++ ; while(q[i] < x);
  13. do j -- ; while(q[j] > x);
  14. if (i < j) swap(q[i], q[j]);
  15. }
  16. quick_sort(q, l, j); // i - 1
  17. quick_sort(q, j + 1, r); // i
  18. }
  19. int main()
  20. {
  21. scanf("%d", &n);
  22. for(int i = 0; i < n; i ++) scanf("%d", &q[i]);
  23. quick_sort(q, 0, n - 1);
  24. for(int i = 0; i < n; i ++) printf("%d ",q[i]);
  25. return 0;
  26. }

归并排序

分治思想
先递归两边再做排序
双指针算法
image.png
image.png