快速排序

    1. #include <stdio.h>
    2. #include<stdlib.h>
    3. #include<math.h>
    4. #include<string.h>
    5. #include<stdbool.h>
    6. void Swap(int* p, int* q)
    7. {
    8. int buf;
    9. buf = *p;
    10. *p = *q;
    11. *q = buf;
    12. }
    13. void QuickSort(int* a, int low, int high)
    14. {
    15. int i = low;
    16. int j = high;
    17. int key = a[low];
    18. if (low >= high) //如果low >= high说明排序结束了
    19. {
    20. return;
    21. }
    22. while (low < high) //该while循环结束一次表示比较了一轮
    23. {
    24. while (low < high && key <= a[high])
    25. {
    26. --high; //向前寻找
    27. }
    28. if (key > a[high])
    29. {
    30. Swap(&a[low], &a[high]);
    31. ++low;
    32. }
    33. while (low < high && key >= a[low])
    34. {
    35. ++low; //向后寻找
    36. }
    37. if (key < a[low])
    38. {
    39. Swap(&a[low], &a[high]);
    40. --high;
    41. }
    42. }
    43. QuickSort(a, i, low - 1); //用同样的方式对分出来的左边的部分进行同上的做法
    44. QuickSort(a, low + 1, j); //用同样的方式对分出来的右边的部分进行同上的做法
    45. }