话不多说,直接上代码。
带有一些注释,方便理解。
不懂的可以看《小白算法》里的解释。

  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. #define block_system \
  4. getchar(); \
  5. system("pause")
  6. void quick_sort(int *ptr, int left, int right)
  7. {
  8. if (left > right)
  9. return; //退出条件
  10. int temp = ptr[left];
  11. int i = left, j = right, exchange_;
  12. while (i != j) // right first
  13. {
  14. while (ptr[j] >= temp && i < j) //定位到一个小于基准数的位置
  15. j--;
  16. while (ptr[i] <= temp && i < j) //定位到一个大于基准数的位置
  17. i++;
  18. if (i < j)
  19. {
  20. exchange_ = ptr[j];
  21. ptr[j] = ptr[i];
  22. ptr[i] = exchange_;
  23. }
  24. //最终的时候,j会和i重合,此时对应一个小于基准数的下标
  25. }
  26. //基准数回家
  27. ptr[left] = ptr[i]; //此处是j也可以,因为此时i j重合且此时数小于基准数,直接左移
  28. ptr[i] = temp;
  29. //二分,递归处理剩下的数组
  30. quick_sort(ptr, left, i - 1);
  31. quick_sort(ptr, j + 1, right);
  32. //关于递归,可以想象多米诺骨牌:推的动作是一块块传递下去,但要得到"倒下"的结果
  33. //当最后一块倒下,倒下的结果再逆向向前传递到第一个,直到第一块完成,此时递归完成。
  34. }
  35. void bubble_sort(int *ptr, int len)
  36. {
  37. int temp_exchnage;
  38. for (int i = 1; i <= len - 1; ++i) //只需要进行len-1次冒泡
  39. {
  40. for (int j = 1; j <= len - i; ++j) //竖向传递
  41. {
  42. //冒泡 咕噜咕噜
  43. if (ptr[j] < ptr[j + 1]) //横向传递
  44. {
  45. temp_exchnage = ptr[j + 1];
  46. ptr[j + 1] = ptr[j];
  47. ptr[j] = temp_exchnage;
  48. }
  49. }
  50. }
  51. }
  52. void bucket_sort(int *num_ptr, int *result_ptr, int len, bool is_repeat)
  53. {
  54. if (is_repeat) //是否去重
  55. {
  56. for (int i = 1; i <= len; ++i)
  57. {
  58. if (num_ptr[i] >= 0)
  59. result_ptr[num_ptr[i]] = 1;
  60. }
  61. }
  62. else
  63. {
  64. for (int i = 1; i <= len; ++i)
  65. {
  66. if (num_ptr[i] >= 0)
  67. result_ptr[num_ptr[i]]++;
  68. }
  69. }
  70. }
  71. int main()
  72. {
  73. int temp_sort[100];
  74. int n;
  75. cin >> n; //个数
  76. for (int i = 1; i <= n; ++i) //此处采用习惯排列,以1为初始坐标
  77. {
  78. cin >> temp_sort[i];
  79. }
  80. //使用哪种排序方式
  81. #ifdef use_quick_sort
  82. quick_sort(temp_sort, 1, n);
  83. #endif
  84. #ifdef use_bubble_sort
  85. bubble_sort(temp_sort, n);
  86. #endif
  87. #ifdef use_bucket_sort
  88. int result[1000] = {0};
  89. bubble_sort(temp_sort, result, n, true);
  90. #endif
  91. block_system;
  92. return 0;
  93. }`
点赞(0)
 

9.9 分

1 人评分

 

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 1 条评论

000936叶素a 3年前 回复TA
咕噜咕噜