C++之算法,快速排序

快速排序

 

思路:

一个数组,随便选一个做基数,比它大的放他右边,比它小的放它左边,一轮下来就分成两组了,这两组再分别按刚才方法递归。

具体操作:

一个数组,第一个做基数取出来存在一个变量里,设置两个游标分别为数组开始和结束,

开始循环:

先按照游标从右到左依次选一个和基数比,该数比基数大就把结束游标向左移一位,比基数小的就把该数放到开始游标上去,此时再按照游标从左向右依次选一个数和基数比,该数比基数小就把开始游标向右移一位,比基数大就该数放到结束游标上去,再从新开始循环。

直到两个游标相等,开始递归。

 

int main ()
{
    int data[] = {34,65,12,43,67,5,78,10,3,70} , k;
    int len=sizeof(data)/sizeof(int);
    quickSort(data , 0 , len-1);
    for (int i = 0; i < len; i++)
    {
        cout<<data[i]<<"\n";
    }
}

void quickSort(int array[] , int begin , int end){
    if(begin<end){
        int l = begin , r = end , x = array[begin];
        while(l < r){
            while(l<r && array[r]>=x)
                r--;
            if(l<r){
                array[l] = array[r];
                l++;
            }
            while(l<r && array[l]<x)
                l++;
            if(l<r){
                array[r] = array[l];
                r--;
            }
        }
        array[l] = array[r] = x;
        quickSort(array , begin , r-1);
        quickSort(array , r+1 , end);
    }

}

 

posted on 2014-11-05 14:04  allen__  阅读(222)  评论(0编辑  收藏  举报

导航