当前位置:   article > 正文

几种排序方法的比较(选择、冒泡、归并、快排)_随机数比较冒泡排序 快速排序

随机数比较冒泡排序 快速排序

代码:

  1. #include<cstdio>
  2. #include<cstdlib>
  3. #include<algorithm>
  4. #include<ctime>
  5. using namespace std;
  6. const int maxn = 50000;
  7. //冒泡排序:
  8. void bubble(int a[],int len){
  9. for(int i = 0;i < len-1;i++){
  10. for(int j = 0; j < len-i-1; j++){
  11. if(a[j] > a[j+1]){
  12. int temp = a[j]; a[j] = a[j+1]; a[j+1] = temp;
  13. }
  14. }
  15. }
  16. }
  17. //选择排序:
  18. void select(int a[],int len){
  19. for(int i = 0 ; i < len-1; i++){
  20. int min = i;
  21. for(int j = i; j < len; j++){
  22. if(a[min] > a[j]){
  23. min = j;
  24. }
  25. }
  26. if(min != i){
  27. int temp = a[i]; a[i] = a[min]; a[min] = temp;
  28. }
  29. }
  30. }
  31. //归并算法:
  32. void Merge(int a[],int b[],int left, int i ,int right){
  33. int j = 0;
  34. int r = i+1;
  35. int l = left;
  36. int k;
  37. int t;
  38. while(l<=i && r<=right){
  39. if(a[l] <= a[r]){
  40. b[j++] = a[l++];
  41. }else{
  42. b[j++] = a[r++];
  43. }
  44. }
  45. if(l<=i){
  46. for(k = l; k <= i; k++){
  47. b[j++] = a[k];
  48. }
  49. }
  50. else if(r<=right){
  51. for(k = r; k <= right; k++){
  52. b[j++] = a[k];
  53. }
  54. }
  55. //从b数组合并到a数组
  56. j = 0;
  57. for(k = left; k <= right; k++){
  58. a[k] = b[j++];
  59. }
  60. }
  61. void MergeSort(int a[],int b[],int left,int right){
  62. int i;
  63. if(left < right){
  64. i = (left+right)/2;
  65. MergeSort(a,b,left,i);
  66. MergeSort(a,b,i+1,right);
  67. Merge(a,b,left,i,right); //合并
  68. }
  69. }
  70. //快速排序:
  71. int Partition(int a[],int p,int r){
  72. int i = p;
  73. int j = r,x = a[p];
  74. while(i<j){
  75. while(j>=p && a[j]>x)j--;
  76. if(i < j){
  77. a[i++] = a[j];
  78. }
  79. while(i<=r && a[i]<x)i++;
  80. if(i < j){
  81. a[j--] = a[i];
  82. }
  83. }
  84. a[j] = x;
  85. return j;
  86. }
  87. void QuickSort(int a[],int p,int r){
  88. if(p<r){
  89. int q = Partition(a,p,r);
  90. QuickSort(a,p,q-1);
  91. QuickSort(a,q+1,r);
  92. }
  93. }
  94. int main(){
  95. int a[maxn] , b[maxn] , c[maxn];
  96. for(int i = 0; i < maxn; i++){ //产生随机数
  97. a[i] = rand();
  98. c[i] = a[i];
  99. }
  100. double bstart = clock();
  101. bubble(a,maxn);
  102. double bend = clock();
  103. for(int i = 0; i < maxn; i++){ //保证每次排序的数据及顺序相同
  104. a[i] = c[i];
  105. }
  106. double sstart = clock();
  107. select(a,maxn);
  108. double send = clock();
  109. for(int i = 0; i < maxn; i++){
  110. a[i] = c[i];
  111. }
  112. double qstart = clock();
  113. QuickSort(a,0,maxn-1);
  114. double qend = clock();
  115. for(int i = 0; i < maxn; i++){
  116. a[i] = c[i];
  117. }
  118. double mstart = clock();
  119. MergeSort(a,b,0,maxn-1);
  120. double mend = clock();
  121. // for(int i = 0; i < 100; i++){ //测试排序是否正确
  122. // printf("%d ",a[i]);
  123. // }
  124. printf("\n");
  125. printf("用冒泡、选择、快排、归并排序50000个随机数,时间复杂度做比较:\n");
  126. printf("冒泡排序所用时间:%.2lf\n",bend-bstart);
  127. printf("选择排序所用时间:%.2lf\n",send-sstart);
  128. printf("快速排序所用时间:%.2lf\n",qend-qstart);
  129. printf("归并排序所用时间:%.2lf\n",mend-mstart);
  130. return 0;
  131. }



测试了一些数据,貌似归并是最快的,当然快排也不赖

声明:本文内容由网友自发贡献,转载请注明出处:【wpsshop】
推荐阅读
相关标签
  

闽ICP备14008679号