-
快速排序法(Quick Sort) - [C++]
2008-04-24
版权声明:转载时请以超链接形式标明文章原始出处和作者信息及本声明
http://sundry.blogbus.com/logs/19704279.html
快速排序法是由英国计算机科学家C.A.R.Hoare提出的,是一种比较有效的排序算法,平均时间复杂性为O(n log n),比插入排序、冒泡排序和选择排序等方法的复杂性低,得到了非常广泛的应用。
快速排序法的思想:将要排序的向量按某种标准分为两个集合,再将每个集合 按该标准再 分为两个集合......以此类推(递归),当每个集合中只有一个数据时,排序完成。
程序的解释: Vector<T>& 是数组向量模板,low和high是向量要排序部分的上限和下限。
1.取最左边的数位参考值,比它大的向量都放在它右边,比他小的向量都放在它左边。模板函数如下 :
template<class T>int partition(Vector<T>& vec,int low,int high){
T pivot = vec[low];//参考值
while(low<high){
while(low<high&&vec[high]>pivot)
high--;
if(low<high){
vec[low]=vec[high];
low++;
}
while(low<high&&vec[low]<pivot)
low++;
if(low<high){
vec[high]=vec[low];
high--;
}
}
vec[high]=pivot;
return high;//返回值hign=low,也就是参考值现在所在的下标
}2.实现递归
template<class T>void quickSort(Vector<T>& vec,int low,int high){
if(low>=high)
return;
int m=partition(vec,low,high);//参考值的下标
quickSort(vec,low,m-1);//调用自己
quickSort(vec,m+1,high);//调用自己
}3.快速排序法的入口 ,重载了quickSort函数
template<class T>void quickSort(Vector<T>& vec){
quickSort(vec,0,vec.getlenght()-1);
}4.使用:
Vector<int> a(10);
a[0]=17;
a[1]=24;
a[2]=55;
a[3]=21;
a[4]=90;
a[5]=16;
a[6]=855;
a[7]=2;
a[8]=9;
a[9]=3;
quickSort(a);随机文章:
讨厌出差 2009-11-04their lives inhaled asbestos dus 2009-11-04营销爱好者常说的经典黄段子 2008-05-10链表、链类与遍历器 2008-05-03插入排序法 2008-04-29
收藏到:Del.icio.us







