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

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

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


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

版本一:

双向扫描版本:


如图:






代码如下:


[cpp]  view plain  copy
  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. }  




版本二:

单项扫描:

[cpp]  view plain  copy
  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. }  
  18. void swap2(int &a,int &b)  
  19. {  
  20.     if(a==b) return;//对同一地址的数据交换,会使其结果为0  
  21.     a=a^b;  
  22.     b=a^b;  
  23.     a=a^b;  
  24. }  

猜你喜欢

转载自blog.csdn.net/zjy900507/article/details/80503320
今日推荐