算法导论笔记之快速排序
来源:互联网 发布:说明书印刷排版软件 编辑:程序博客网 时间:2024/05/09 22:29
快速排序:时间复杂度 nlgn
int myParticipation(int *a,int p,int r),其中p,r分别为待分割数组的上下边界
实现思路1:算法导论中的分割算法(此分割不占用额外空间,交换除外)
将数组分为连续的3部分,第一段为小于a[pos]的部分,第二段为大于a[pos]的部分,第三段为还未处理的部分,分别用i,j,r表示这三段的右边界;分隔开始时,i为0(数组以外),j为1,每次比较a[j]和a[r]的值,若a[j]>=a[r],则j++,即第二段长度加1,第一段长度不变(初始为0);若a[j]<a[r],则i++,即第一段长度加1,第二段长度不变,并交换a[i],a[j],但由于第一段第二段连续存储,第二段整体向右平移,因此j++;
当j==r时,此时数组变为2段(最后一段消失),则交换a[i+1],a[r],并返回i+1,i+1即为轴的下标(i为小于轴的那一段的右边界,因此将i+1段置为轴)
伪代码:
PARTITION(A,p,r)
1 x ← A[r]
2 i ← p-1
3 for j ← p to r-1
4 do if A[j]≤x
5 then i ← i+1
6 exchange A[i]←→A[j]
7 exchange A[i+1]←→A[r]
8 return i+1
实现思路2:tony hoare的分割算法(此分割需占用而外空间)
选定a[p]为轴,i,j分别初始化为p+1,r,若a[i]小于轴,i++,直到a[i]>a[p];
若a[j]大于轴,j--,直到a[j]<a[p];交换a[i],a[j];当i>=j时程序结束;j即为返回下标
伪代码:
HOARE-PARTITION(A, p, r)
1 x ← A[p]
2 i ← p - 1
3 j ← r + 1
4 while TRUE
5 do repeat j ← j - 1
6 until A[j] ≤ x
7 repeat i ← i + 1
8 until A[i] ≥ x
9 if i < j
10 then exchange A[i] ? A[j]
11 else return j
- 算法导论笔记之快速排序
- 算法导论笔记之----随机快速排序
- 算法导论之快速排序---学习笔记
- 算法导论学习笔记(一)排序算法之快速排序
- 算法导论之快速排序
- 算法导论之快速排序
- 《算法导论》学习笔记之Chapter7快速排序
- 【算法导论之二】快速排序算法
- 算法导论笔记--3--快速排序
- 算法导论笔记(三) : 快速排序
- 算法导论笔记:07快速排序
- 算法导论笔记——快速排序
- 快速排序-《算法导论》学习笔记七
- 算法导论第二版笔记之快速排序与随机化快速排序
- 【算法导论】第七章之快速排序
- 算法导论 之 快速排序[C语言]
- 【算法导论】C++源码之快速排序
- 算法导论系列文章之快速排序
- __user_initial_stackheap的设定
- MySQL Workbench 图形界面
- 有类查找和无类查找
- Release版本错误解决方案及调试
- Objective_C扩展机制学习
- 算法导论笔记之快速排序
- Android 复合控件Compound Controls
- uuid
- 敏捷开发12路
- ubuntu 中安装rpm
- ICE简介
- Switch
- solaris配置IP地址步骤
- JQuery 禁用启用按钮