QuickSort分析,这是回复提问时碰到的,顺便对学过的算法进行复习,总结...
来源:互联网 发布:java constructor类型 编辑:程序博客网 时间:2024/05/22 13:26
这个算法与C语言数据结构是的有所不同,不过性质一样都是采用分治法来实现的
平均时间复杂度为O(nlgn) ,最坏为O(n^2)
主要思想就是维持两个区间,左区间的元素小于mid,右区间则反之,对区间元素进行处理
void QuickSort(vector <int> & v, int low, int high)
{
int temp;
if(low <high)
{
int midPos=low;
int mid=v[low];
//每次循环目的是为了在[low, high]区间确定里v[low]的位置,
//始终维持两个区间左区间(小于v[low]),右区间(大于v[low])
//即midPos划分出左区间[low+1,midPos]和右区间[midPos+1,high]两部分,递归分治将大的区间分成小区间
//midPos所指向的位置永远是在左区间的第后个元素,也是最终v[low](mid)排序后的位置
for(int i=low+1;i <=high;++i)
{
//如果v[i]> =mid,即该元素为属于右区间即大于mid的区间,直接将i=i+1,midPos值不变,可以知道在[midPos+1,i]区间元素为右区间
//v[i] <mid里则v[i]应该不属于右区间中(然而我们必须得维持[midPos+1,i]为右区间),利用交换v[i]与v[midPos+1]的值(v[midPos+1]为右区间的第一个元素)并且将midPos=midPos+1(使midPos再次指向左区间的未端),这样保证[low+1,midPos]为左区间,[midPos+1,i]为右区间,通过交换同时把小于mid的v[i]元素放入[low+1,midPos]中
if(v[i] <mid && ++midPos!=i) //避免是相等的时候
{
temp=v[i];
v[i]=v[midPos];
v[midPos]=temp;
}
}
//循环结束后,区间[low+1,high]划分成[low+1,midPos],[midPos+1,high],这样递归直到每个区间只剩下两元素
//一次递归只是将v[low]元素值的位置确定了下来,并以midPos为划分点,在其左边的所有元素值一定比它小,
//右边所有的元素都比它大,所以v[low]排序后位置通过一次循环就固定了
//处理v[low],将其与midPos元素的位置交换就行,这就是v[low]排序后的位置
temp=v[low];
v[low]=v[midPos];
v[midPos]=temp;
//完成以对v[midPos]位置的排序后,对子区间进行分而治之...
QuickSort(v, low, midPos-1); //对左区间[low,midPos-1]进行递归
QuickSort(v, midPos+1, high);//对右区间[midPos+1,midPos+1]进行递归
}
}
- QuickSort分析,这是回复提问时碰到的,顺便对学过的算法进行复习,总结...
- 这是我总结的新学的oracle数据库,适合学过的新手复习
- 对网友“宝宝”所提问题的回复
- 学过的知识该多复习
- 总结的新学的oracle数据库,适合学过的新手复习
- QuickSort及其变种算法的总结
- 很黄很暴力的论坛提问和回复
- 在对android APK进行签名的过程中,我碰到过几种不同的问题:
- 顺便再写一个递归 复习一下前面学的知识
- 算法基础复习-QuickSort
- 发生过的回复汇添富
- 微妙的quicksort算法
- gdb调试core dump入门实践(顺便复习一下之前介绍过的addr2line命令调试)
- 删除多余备份文件 保留最近的10个,顺便复习下排序算法
- 学完静态后的复习总结
- 由微信推送引发的SQL join语句总结,顺便复习一下下MySQL
- 那些年我们学过的算法
- 总结我学过的java1。
- Linux下的杀毒软件Avast
- 运气比选择重要,选择比努力重要
- 人体十大最佳黄金时间
- 与测试同行分享一本好书——《全程软件测试》
- Oracle 跨库 查询 复制表数据(转)_CAD/CAM/CAE/CAPP/CA......
- QuickSort分析,这是回复提问时碰到的,顺便对学过的算法进行复习,总结...
- 2K/XP/2003 系统登录密码破解超简单,什么工具都不用
- String args 的一个应用出错
- 我的emacs配置
- 开始做毕业设计
- 一个简单的邮件查找类,用来查找特定主题的邮件,特定日期,或者是包含有附件的邮件
- 世界著名公司/品牌名字的由来
- 安装玻璃鱼Glassfish
- 如何在C#中编写多线程应用程序