zoukankan      html  css  js  c++  java
  • 算法33 快排两种写法

    1.前后两指针互换

        void Qrank(vector<int>& nums,int start,int over){
            if(start>=over) return;
            int left=start;
            int right=over;
            // int rdm = rand() % (over - start + 1) + start; // 随机选一个作为我们的主元
            // swap(nums[rdm],nums[over]);
            while (left<right){
                while(nums[left]<=nums[over]&&left<right) left++;
                while(nums[right]>=nums[over]&&left<right) right--;
                swap(nums[left],nums[right]);
            }
            // if(nums[l]>=nums[r]){
            swap(nums[left],nums[over]);
            // }else{l++;//l=end,nl>=nr
            // }
            Qrank(nums,start,left-1);
            Qrank(nums,left+1,over);
            
        }
    
    

    2.快慢指针,i遍历指针,k必然停留在大于pivot的点之前,如果之后没有小于pivot的点则k在中点左侧

        void Qrank2(vector<int>& nums,int start,int over){
            if(start>=over) return;
            int i=start;
            int k=start-1;
            while(i<over){
                if(nums[i]<nums[over]){
                    k++;
                    swap(nums[i],nums[k]);
                }
                i++;
            }
            swap(nums[k+1],nums[over]);
            Qrank2(nums,start,k);
            Qrank2(nums,k+2,over);
        }
    };
    
    
    
  • 相关阅读:
    Django基础二之URL路由系统
    Django基础一之web框架的本质
    HTTP协议超级详解
    动态规划-背包问题
    java 中对象比较大小
    排序算法
    泛型
    打jar包和使用jar包
    Mongodb中Sharding集群
    linux时间同步,ntpd、ntpdate
  • 原文地址:https://www.cnblogs.com/impw/p/15708221.html
Copyright © 2011-2022 走看看