赞
踩
1、定义两个指针prev和cur,分别指向left和left+1。
2、定义一个变量keyi,用于保存基准值的下标,初始值为left。
3、进入一个循环,循环条件是cur <= right,即cur指针没有越界。
4、在循环中,如果a[cur]小于基准值a[keyi],则将prev指针右移一位,并交换a[prev]和a[cur]的值,保证prev指针之前的元素都小于基准值。
5、将cur指针右移一位。
6、重复步骤4到步骤6,直到cur指针越界。
7、最后,将基准值a[keyi]和a[prev]交换位置,将基准值放在正确的位置上。
8、返回分割点的下标prev。
同样实现了将数据分成两部分,左边的元素都小于等于基准值,右边的元素都大于基准值。
代码:
- int PartSort3(int* a, int left, int right)
- {
- //三数取中优化
- //int midi = NumBers(a, left, right);
- //Swap(&a[left], &a[midi]);
-
- int prev = left;
- int cur = prev + 1;
- int key = left;
-
- while(cur <= right){
- if(a[cur]< a[key] && ++prev != cur){
- Swap(&a[prev],&a[cur]);
- }
- cur++;
- }
-
- Swap(&a[prev],&a[key]);
- return prev;
- }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。