谁能仔细说说这段快速排序算法分割怎么回事

intPartition(SortDataV[],intlow,inthigh){intpivotpos=low;SortDatapivot=V[low];for(int... int Partition ( SortData V[ ], int low, int high ) {
int pivotpos = low;
SortData pivot = V[low];
for ( int i = low+1; i <= high; i++ )
if ( V[i] < pivot ) {
pivotpos++;
if ( pivotpos != i )
Swap ( V[pivotpos], V[i] );
}
Swap ( V[low], V[pivotpos] );
return pivotpos;
}
展开
 我来答
井王无意
2009-01-31
知道答主
回答量:4
采纳率:0%
帮助的人:0
展开全部
快速排序的分割宗旨就是
1.在待排序序列中选定一个值 pivot
2.通过一轮快排,将小于pivot的值丢到其左边,大于pivot的值丢到其右边
3.以pivot为界,分割该序列,递归调用快排算法

int Partition ( SortData V[ ], int low, int high ) {
int pivotpos = low; //选择待排序序列的第一个数值为piovt
SortData pivot = V[low]; //得出pivot的值,存在SortData变量中
for ( int i = low+1; i <= high; i++ ) //开始循环
if ( V[i] < pivot ) { //如果遇到小于pivot的值,说明pivot的位置应该后移一位,因为已经找到一个比他小的了
pivotpos++; //pivot位置后移
if ( pivotpos != i )
Swap ( V[pivotpos], V[i] ); //交换两个值
}
Swap ( V[low], V[pivotpos] ); //交换两个值
return pivotpos; //完成排序,pivot前面都比他小,后面都比他大
}

如果你对于那两个交换是如何保证小的在前面,大的在后面有疑问的话
冷静下来手工操作一遍就明白了
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式