zoukankan      html  css  js  c++  java
  • 快速排序与挑白菜

    快排的两个步骤:
    1,找基准点;
    2,递归1;

    挑白菜的方法来解释:

    先设定“分段点”为第一个白菜x[0],称为“标准大小的白菜”;
    L站x[1],向右挑;R站在x[n-1],向左挑;
    循环(直到两人碰面之后停止)
    {    
       循环(L碰见的白菜比“标准”小 && L没有走到头)
       {
          L继续向右挑白菜;
       }
       循环(R碰见的白菜比“标准”大 && 没有走到头)
       {
            R继续向左挑白菜;
       }

       如果(L在R的左边)  /* 这里加这个if条件是因为,有可能L已经跑到R的右边了 */
       {
          交换白菜;
       }
    }
    最后,R处于的位置就是分段点。
    交换分段点与x[0]的白菜,完成“一次划分”。

    C代码:

    int partition(int x[],int left,int right)
    {
     
    int pivot=x[left]; 
     
    int l;
     
    int r;
     
    int temp;
     
    int middle;

     l
    =left+1
     r
    =right;

     
    while(l<r)
     {
      
    while(x[l] < pivot && l <= right){l++;}
      
    while(x[r] > pivot && r >= left){ r--;}

      
    if(l<r){
       temp
    =x[l];
       x[l]
    =x[r];
       x[r]
    =temp;
      }
     }

      middle
    =r;  
      temp
    =x[middle];
      x[middle]
    =x[left];
      x[left]
    =temp;

      
    return r;

    }

    void quick_sort(int x[],int left,int right)
    {
     
    int middle;
     
    if(left<right)
     {middle 
    = partition(x,left,right);
      quick_sort(x,left,middle
    -1);
      quick_sort(x,middle
    +1,right);
     }
    }
  • 相关阅读:
    springboot模板
    springboot入门
    java自定义注解
    git集成idea
    git的搭建和使用
    Shiro授权
    shiro认证
    shiro入门
    springmvc文件上传
    springmvc入门
  • 原文地址:https://www.cnblogs.com/caca/p/730908.html
Copyright © 2011-2022 走看看