欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

快速排序

程序员文章站 2022-03-24 13:24:13
...

选左侧第一个数为基准数,从右侧开始找一个比基准数小的数,从左侧开始找一个比其大的数,二者调换,再接着找,直到两向相遇,则将相遇点的数据与基准数调换;接着对基准数两侧的数据进行与上述相同的操作,进行递归处理。

    void fastSort(vector<int>& nums,int left,int right){
        if(left>=right) return;
        if(nums.size()<=1) return;
        int pilot = nums[left];
        int leftIndex = left;
        int rightIndex = right;
        while(leftIndex<rightIndex){
            while(leftIndex<rightIndex){
                if(pilot<=nums[rightIndex]) rightIndex--;
                else{
                    nums[leftIndex] = nums[rightIndex];
                    leftIndex++;
                    break;
                }
            }
            while(leftIndex<rightIndex){
                if(pilot>=nums[leftIndex]) leftIndex++;
                else{
                    nums[rightIndex] = nums[leftIndex];
                    rightIndex--;
                    break;
                }
            }
        }
        nums[leftIndex] = pilot;
        fastSort(nums,left,leftIndex-1);
        fastSort(nums,rightIndex+1,right);
    }
相关标签: 排序算法