每日编程2之快速排序
来源:互联网 发布:九大排序算法 编辑:程序博客网 时间:2024/05/21 17:06
6 4 3 7 5
用变量i记录,(i+1)代表着下一个比pivot大的元素,j对元素序列进行遍历(p<=j<=q-1),当其遍历的元素比pivot小,则交换A[i+1]与A[j]
始终保持i,i+1为序列中小元素,大元素的分界线...
遍历完成后交换A[q]与A[i+1],此时i+1即为A[q]元素的最终位置,
以此为界,形成的二个子序列进行递归,递归结束的条件是p<=q,即只有一个/零个元素的情况
核心代码:
int quickSort(float A[],int p,int q){
if(p<q)
{
float pivot = A[q];
int i = p-1;
int j;
for(j=p;j<q;j++)
{
if(A[j]<pivot) {SWAP(A[i+1],A[j]); i++;}
}
SWAP(A[i+1],A[q]);
quickSort(A,p,i);
quickSort(A,i+2,q);
}
}
编码过程中出现的二个问题:
(1)之前用int pivot而不是float pivot,结果在赋值int pivot=A[q]的时候,浮点数自动取整
(2)在quickSort的排序过程中,交换的发生双方可能是同一个元素(比如A[0]),这就导致程序中的SWAP交换宏不能正常使用,产生很多0元素
- 每日编程2之快速排序
- 每日编程3之快速排序随机化版本
- 每日编程7之快速排序非递归版本
- 每日一算法之快速排序
- 每日编程1之冒泡排序
- 每日编程13之希尔排序
- 【每日算法】快速排序
- 范式编程之快速排序
- 编程珠玑之快速排序
- 每日一算法之快速排序原理及实现
- 每日练习之c#快速排序的实现
- 每日一算法之快速排序原理及实现
- 每日一算法--快速排序
- 每日算法1:快速排序
- <每日一题>快速排序
- C++编程练习(16)----“排序算法 之 快速排序“
- 每日一题(92) - 快速排序
- 每日一题4:快速排序
- 反调试技巧总结-原理和实现
- 【拓扑排序】最小拓扑序 topsort
- 【最短路】【DP】出行 trip
- 关于Android的selector背景选择器的配置不起作用的问题
- 成就人生的十只魔戒
- 每日编程2之快速排序
- 什么是mysql集群
- cocos2d-iphone之魔塔20层第四部分
- Oracle 11203 GRID在CRS磁盘组损坏后的处理
- Eclipse中快速给出main方法签名和标准输出
- 【CXY】JAVA应用 之 排序
- android中layout_weight的理解
- 大数据:相似项发现
- 玩转tokyotyrant