您的位置:首页 > 其它

快速排序算法总结

2015-12-08 22:20 309 查看
有了上一篇的区间划分以后,快速算法就比较容易实现,快速算法是一种原地排序算法,最坏情况下是O(n*n),平均时间是O(lgn)。其原理:通过区间划分,不断递归,最后只有一个元素,则已经排好序。所以采用分治法,但并不需要合并,因为两个子数组是就地排序的。代码如下:

void Insert::QuickSort(vector<int> &coll,int p,int total)
{
if(p<total)
{
int q=Partition(coll,p,total);
QuickSort(coll,p,q-1);
QuickSort(coll,q+1,total);
}

}

int Insert::Partition(vector<int> &coll,int p,int total)
{
int left=p-1,right=0,temp=0;
int pivot=coll[total];//主元,主元只用于比较,不用于迭代
for(right=p;right<total;++right)
{
if(coll[right]<pivot)
{
++left;
temp=coll[left];
coll[left]=coll[right];
coll[right]=temp;
}
}
coll[total]=coll[++left];
coll[left]=pivot;
return left;
}


p代表排序的初始下标,total为最终下标。注意,是下标,不是大小。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: