【算法学习】快速排序

1.算法思路:

  选择一个基准点,将数组中比基准点小的值移到基准值左边,比基准值大的移到基准值右边。然后递归调用,将基准值左右两边的数组做同样操作,递归结束的条件是数组只有一个元素。

  基准点归位的方法:

    设一头一尾两个指针,右指针向左找比第一个基准值小的数,左指针向右找第一个比基准值大的数,找到后交换,直到左指针==右指针;

2.代码:

  

void quicksort(int left,int right)
{
    int i,j,t,temp;
    if(left>right)
       return;
      
    temp=a[left]; //temp中存的就是基准数
    i=left;
    j=right;
    while(i!=j)
    {
                   while(a[j]>=temp && i<j)
                            j--;
                   while(a[i]<=temp && i<j)
                            i++;
                   //交换
                   if(i<j)
                   {
                            t=a[i];
                            a[i]=a[j];
                            a[j]=t;
                   }
    }
    a[left]=a[i];
    a[i]=temp;
   
    quicksort(left,i-1);
    quicksort(i+1,right);
}

  

猜你喜欢

转载自www.cnblogs.com/teensSpirit-code-life/p/11741377.html