快速排序

 
  
  
  
  
  1. #include <stdio.h> 
  2.  
  3. void QuickSort(int [], intint); 
  4.  
  5. int main() 
  6.     int n;//n为将输入的数列的所含元素的各数 
  7.  
  8.     printf("请输入你要排序的各数:\n"); 
  9.     scanf("%d", &n); 
  10.  
  11.     int a[n+1];//定义存储数列数组 
  12.  
  13.     printf("请输入你要排序的数列:\n"); 
  14.  
  15.     for(int i = 1; i <= n; i ++) 
  16.         scanf("%d", &a[i]); 
  17.  
  18.     QuickSort(a, 1, n); 
  19.  
  20.     printf("排序完成:\n"); 
  21.  
  22.     for(int i = 1; i <= n; i ++) 
  23.         printf("%d ", a[i]); 
  24.  
  25.  
  26.     return 0; 
  27. }//main 
  28.  
  29. /****************************************/ 
  30. /***Partition:为数列的子乱序数列排序***/ 
  31. /***************************************/ 
  32.  
  33. int Partition(int a[], int l, int h) 
  34.     int i = l, j = h; 
  35.     int key = a[0] = a[i];//将第一个元素作为关键值存放在a[0] 
  36.  
  37.     while(i < j) 
  38.     { 
  39.         while(i < j && a[j] >= key) 
  40.             j --; 
  41.         a[i] = a[j]; 
  42.         while(i < j && a[i] <= key) 
  43.             i ++; 
  44.         a[j] = a[i]; 
  45.     }//while 
  46.  
  47.     a[i] = a[0]; 
  48.  
  49.     return i; 
  50.  
  51.  
  52. /************************************************/ 
  53. /***QuickSort:递归调用Partition()拆分、排序***/ 
  54. /***********************************************/ 
  55.  
  56. void QuickSort(int a[], int s, int t) 
  57.     int k; 
  58.  
  59.     if(s < t) 
  60.     { 
  61.         k = Partition(a, s, t); 
  62.         QuickSort(a, s, k - 1); 
  63.         QuickSort(a, k + 1, t); 
  64.     } 

 

你可能感兴趣的:(排序,快速排序,Quicksort,C语言实现)