当前位置:   article > 正文

快速排序---双指针法

快速排序---双指针法
  • 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。

同样实现了将数据分成两部分,左边的元素都小于等于基准值,右边的元素都大于基准值。

代码:

  1. int PartSort3(int* a, int left, int right)
  2. {
  3. //三数取中优化
  4. //int midi = NumBers(a, left, right);
  5. //Swap(&a[left], &a[midi]);
  6. int prev = left;
  7. int cur = prev + 1;
  8. int key = left;
  9. while(cur <= right){
  10. if(a[cur]< a[key] && ++prev != cur){
  11. Swap(&a[prev],&a[cur]);
  12. }
  13. cur++;
  14. }
  15. Swap(&a[prev],&a[key]);
  16. return prev;
  17. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/盐析白兔/article/detail/947724
推荐阅读
相关标签
  

闽ICP备14008679号