快速排序是由冒泡排序改进而得的,也是交换排序的一种。
快速排序的基本思想如下:从线性表中选取一个元素,设为T,然后将线性表后面小于T的元素移到前面,而前面大于T的元素移到后面,结果就将线性表分成了两部分(称为两个子表),T插入到其分界线的位置处。这个过程称为线性表的分割。通过对线性表的一次分割,将线性表分为前后两个字表,且前面子表中的所有元素均不大于T,而后面子表中的所有元素都不小于T。
如果对分割后的子表再按上述原则进行分割,并且这种分割可以一直做下去,直到所有子表为含有一个元素,此时线性表就变成了有序表。
快速排序的平均时间复杂度为O(nlogn),它是不稳定的。
代码:
#include <iostream> using namespace std; #define T int void quick_sort(T R[],int s, int t)//把R[s]至R[t]的元素进行快速排序 { int low=s,high=t; T temp; temp=R[s]; //用区间的第1个记录作为基准 if(low<high) { while (low<high)//从区间两端交替向中间扫描,直至low=high为止 { while((low<high)&&(R[high]>temp)) high=high-1; //逐渐减小high,直到发现R[high]<temp if (low<high)//表示找到这样的R[high],R[low]和R[high]交换 { R[low]=R[high]; low=low+1; } while ((low<high)&&(R[low]<temp)) low=low+1; //逐渐增大low,直到发现R[low]>temp if (low<high)//表示找到这样的R[low],R[high]和R[low]交换 { R[high]=R[low]; high=high-1; } } R[low]=temp; quick_sort(R,s,low-1); quick_sort(R,low+1,t); } } int main() { int a[10]; int i; cout<<"输入原始序列:"<<endl; for (i=0;i<10;i++) { cin>>a[i]; } cout<<endl; quick_sort(a,0,9); cout<<"排序后:"<<endl; for (i=0;i<10;i++) { cout<<a[i]<<" "; } cout<<endl; return 0; }
 
                     
                    
                 
                    
                 

 
         
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号