数据结构之---C语言实现快速排序(多个版本)

论坛 期权论坛 脚本     
匿名技术用户   2020-12-27 17:57   112   0

快速排序基本上有如下版本

一、国内教材双向扫描版
二、单向扫描版本
三、随机化版本
四、三数取中分割法
五、非递归版


这里给我前两个版本(较为常用)

版本一:

双向扫描版本:


如图:






代码如下:


  1. //快速排序(版本一)
  2. //带枢轴
  3. //杨鑫
  4. #include <stdio.h>
  5. #include <stdlib.h>
  6. #define MAXN 100
  7. int a[MAXN + 1], n;
  8. void QuickSort(int left, int right)
  9. {
  10. int i, j, t, temp;
  11. if(left > right)
  12. return;
  13. temp = a[left];
  14. i = left;
  15. j = right;
  16. while(i != j)
  17. {
  18. while(a[j] >= temp && i < j)
  19. {
  20. j--;
  21. }
  22. while(a[i] <= temp && i < j)
  23. {
  24. i++;
  25. }
  26. if(i < j)
  27. {
  28. t = a[i];
  29. a[i] = a[j];
  30. a[j] = t;
  31. }
  32. }
  33. a[left] = a[i];
  34. a[i] = temp;
  35. QuickSort(left, i - 1);
  36. QuickSort(i + 1, right);
  37. }
  38. int main()
  39. {
  40. printf("=========快速排序版本一==========\n");
  41. int i = 0, j, t, count = 0;
  42. int T;
  43. printf("请输入要对数据排序的个数:\n");
  44. scanf("%d", &T);
  45. while(T--)
  46. {
  47. scanf("%d", &a[i]);
  48. i++;
  49. }
  50. QuickSort(0, i - 1);
  51. printf("排序后的数据是:\n");
  52. for(j = 0; j < i; j++)
  53. {
  54. printf("%d ", a[j]);
  55. }
  56. return 0;
  57. }




版本二:

单项扫描:

  1. void quickSort2(int x[], int l, int r)
  2. {
  3. if(l >= r)
  4. return;
  5. int m = l;
  6. for(int i = l + l; i <= r; i++ )
  7. {
  8. if(x[i] < x[l])
  9. {
  10. swap2(x[++m], x[i]);
  11. }
  12. }
  13. swap2(x[l], x[m]);
  14. quickSort2(x, l, m - 1);
  15. quickSort2(x, m + 1, r);
  16. }
  17. void swap2(int &a,int &b)
  18. {
  19. if(a==b) return;//对同一地址的数据交换,会使其结果为0
  20. a=a^b;
  21. b=a^b;
  22. a=a^b;
  23. }

分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:7942463
帖子:1588486
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP