2.排序之快速排序

来源:互联网 发布:唯一视觉婚纱摄影 知乎 编辑:程序博客网 时间:2024/06/09 17:34

快速排序(Quicksort)是对冒泡排序的一种改进。由C. A. R. Hoare在1962年提出。它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。


c语言实现如下:

[cpp] view plain copy
  1. #include <stdio.h>    
  2.     
  3. //打印数组    
  4. void display(int array[],int size){    
  5.         printf("the array is:");    
  6.         int i;    
  7.         for(i=0;i<size;i++){    
  8.                 printf("%d ",array[i]);    
  9.         }    
  10.         printf("\n");    
  11. }    
  12.     
  13. //分割函数    
  14. int cut(int array[],int left,int right){    
  15.     //将数组的第一个数作为基准值    
  16.         int baseNum = array[left];    
  17.     
  18.         while(left < right){  
  19.         //从数组的右侧开始,找到一个比基准值小的数    
  20.                 while(left < right && array[right] >= baseNum){    
  21.                         right--;    
  22.                 }    
  23.         //将该数赋给left    
  24.                 array[left] = array[right];    
  25.     
  26.         //从数组的左侧开始,找到一个比基准值大的数    
  27.                 while(left < right && array[left] <= baseNum){    
  28.                         left++;    
  29.                 }    
  30.         //将该数赋给right    
  31.                 array[right] = array[left];    
  32.         }  
  33.     
  34.         //最后将基准值赋给left或者right,此时left=right  
  35.         array[left] = baseNum;  
  36.         //返回left或者right   
  37.         return left;  
  38. }  
  39.           
  40.         //快速排序组函数,left和right分别为要进行排序的数组的左右边界  
  41.         void quick(int array[],int left,int right){   
  42.             if(left < right){  
  43.             //分割函数,返回基准值在array中的下标   
  44.             int cutPoint = cut(array,left,right);  
  45.             //对基准值左边的数组进行快速排序   
  46.             quick(array,left,cutPoint-1);  
  47.             //对基准值右边的数组进行快速排序    
  48.             quick(array,cutPoint+1,right); }  
  49.         }  
  50.           
  51.         int main(void){  
  52.             int array[10]={34,45,1,39,21,68,65,100,4,51};   
  53.             display(array,10);  
  54.             //快速排序   
  55.             quick(array,0,9);   
  56.             display(array,10);  
  57.             return 0;  
  58.         }  
ubunut@rxhk:~/work/suanfa$ gcc Quicksort.c -o Quicksort
ubunut@rxhk:~/work/suanfa$ ./Quicksort 
the array is:34 45 1 39 21 68 65 100 4 51 
the array is:1 4 21 34 39 45 51 65 68 100
原创粉丝点击