快速排序

在实际中最常用的一种排序算法,速度快,效率高。

快速排序是找出一个元素(理论上可以随便找一个)作为基准(pivot),然后对数组进行分区操作,使基准左边元素的值都不大于基准值,基准右边的元素值 都不小于基准值,如此作为基准的元素调整到排序后的正确位置。递归快速排序,将其他n-1个元素也调整到排序后的正确位置。最后每个元素都是在排序后的正 确位置,排序完成。所以快速排序算法的核心算法是分区操作,即如何调整基准的位置以及调整返回基准的最终位置以便分治递归。

 

 1 void quicksort(int left,int right) 
 2 { 
 3     int i,j,t,temp; 
 4     if(left>right) 
 5        return; 
 6                                 
 7     temp=a[left]; //temp中存的就是基准数 
 8     i=left; 
 9     j=right; 
10     while(i!=j) 
11     { 
12                    //顺序很重要,要先从右边开始找 
13                    while(a[j]>=temp && i<j) 
14                             j--; 
15                    //再找右边的 
16                    while(a[i]<=temp && i<j) 
17                             i++; 
18                    //交换两个数在数组中的位置 
19                    if(i<j) 
20                    { 
21                             t=a[i]; 
22                             a[i]=a[j]; 
23                             a[j]=t; 
24                    } 
25     } 
26     //最终将基准数归位 
27     a[left]=a[i]; 
28     a[i]=temp; 
29                              
30     quicksort(left,i-1);//继续处理左边的,这里是一个递归的过程 
31     quicksort(i+1,right);//继续处理右边的 ,这里是一个递归的过程 
32 } 

 

posted @ 2017-03-04 20:27  ouyang_wsgwz  阅读(136)  评论(0编辑  收藏  举报