经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 程序设计 » C » 查看文章
基础排序算法
来源:cnblogs  作者:leewhite  时间:2018/9/27 16:50:25  对本文有异议
  1. 1 #include <iostream>
  2. 2 /*****
  3. 3 *
  4. 4 *实现一些基础的排序算法
  5. 5 *
  6. 6 *****/
  7. 7 void display(int R[], int n)
  8. 8 {
  9. 9 for (int i = 0; i < n; ++i)
  10. 10 {
  11. 11 std::cout << R[i] << " ";
  12. 12 }
  13. 13 std::cout << std::endl;
  14. 14 }
  15. 15
  16. 16 /* 1 冒泡排序 */
  17. 17 void BubbleSort(int R[], int n)
  18. 18 {
  19. 19 int i, j;
  20. 20 int tmp;
  21. 21 for (i = 0;i < n - 1; ++i)
  22. 22 {
  23. 23 //从后面开始找,将最小的冒到第一个位子
  24. 24 for(j = n - 1; j > i; --j)
  25. 25 {
  26. 26 if (R[j] < R[j - 1])
  27. 27 {
  28. 28 tmp = R[j];
  29. 29 R[j] = R[j - 1];
  30. 30 R[j - 1] = tmp;
  31. 31 }
  32. 32 }
  33. 33 }
  34. 34 }
  35. 35
  36. 36 /* 2 直接插入排序 从第二个位子开始排好序 */
  37. 37 void InsertSort(int R[], int n)
  38. 38 {
  39. 39 int i , j;
  40. 40 int tmp;
  41. 41 for (i = 1; i < n; ++i)
  42. 42 {
  43. 43 j = i - 1;
  44. 44 tmp = R[i];//可以不用这个变量 相当于拿一个数 然后向后找一个合适的位子
  45. 45 while(j >= 0 && tmp < R[j])
  46. 46 {
  47. 47 R[j + 1] = R[j];
  48. 48 j--;
  49. 49 }
  50. 50 R[j+1] = tmp;
  51. 51 }
  52. 52 }
  53. 53
  54. 54 /* 3 选择排序 从第一个位子开始选择一个最小的数放在这里 */
  55. 55 void SelectSort(int R[], int n)
  56. 56 {
  57. 57 int i, j, k;
  58. 58 int tmp;
  59. 59 for (i = 0; i < n; ++i)
  60. 60 {
  61. 61 k = i;
  62. 62 //i 前面的(比i小的)都已经排好序了
  63. 63 for (j = i + 1; j < n; ++j)
  64. 64 {
  65. 65 if (R[k] > R[j])
  66. 66 {
  67. 67 k = j;
  68. 68 }
  69. 69 }
  70. 70
  71. 71 //找到最小的数所在的位子k 将这个数放在i所在的位子
  72. 72 if (k != i)
  73. 73 {
  74. 74 tmp = R[i];
  75. 75 R[i] = R[k];
  76. 76 R[k] = tmp;
  77. 77 }
  78. 78 }
  79. 79 }
  80. 80
  81. 81 /* 4 快速排序 从数组的第一个数开始作为基准数,将整个数组的左边放比它小的,右边放比它大的*/
  82. 82 void QuickSort(int R[], int s, int t)
  83. 83 {
  84. 84 int i = s , j = t;
  85. 85 int tmp;
  86. 86 if(s < t)
  87. 87 {
  88. 88 tmp = R[s];
  89. 89 while(i != j)
  90. 90 {
  91. 91 //右边找一个比基准数小的
  92. 92 while(i < j && tmp <= R[j])
  93. 93 {
  94. 94 j--;
  95. 95 }
  96. 96 // 找到了就赋到左边
  97. 97 if (i < j)
  98. 98 {
  99. 99 R[i++] = R[j];
  100. 100 }
  101. 101 //左边找一个比基准数大的
  102. 102 while(i < j && tmp >= R[i])
  103. 103 {
  104. 104 i++;
  105. 105 }
  106. 106 //找到了就赋到右边
  107. 107 if (i < j)
  108. 108 {
  109. 109 R[j--] = R[i];
  110. 110 }
  111. 111 }
  112. 112 R[i] = tmp;
  113. 113 //一个基准数结束之后 左边和右边再排序
  114. 114 QuickSort(R, s, i - 1);
  115. 115 QuickSort(R, i + 1, t);
  116. 116
  117. 117 }
  118. 118
  119. 119 }
  120. 120
  121. 121
  122. 122 int main()
  123. 123 {
  124. 124 int r[10] = {3, 4, 5, 2, 1, 0, 9, 8 ,7, 6};
  125. 125 QuickSort(r, 0, 10);
  126. 126 display(r, 10);
  127. 127 }

 

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号