zoukankan      html  css  js  c++  java
  • 快排+rand

    
    #include <vector>
    #include <iostream>
    #include <cassert>
    #include <queue>
    #include <algorithm>
    using namespace std;
    
    //找到l-r里的一个随机元素,并和nums[r]替换
    //返回大于nums[r]的元素下标
    int rand_pos(vector<int> &nums,int l,int r) {
        int len = r-l+1;
        int rand_pos = l + (rand() % (len));
        swap(nums[rand_pos],nums[r]);
        return 0;
    }
    //把[l,r]里面小于nums[r]的元素放在前面
    //返回大于nums[r]的元素下标
    int partition(vector<int> &nums,int l,int r) {
        int x = nums[r];
        int j = l-1;
        for(int i=l;i<r;i++) {
            if(nums[i] <= x) {
                swap(nums[++j],nums[i]);
            }
        }
        swap(nums[j+1],nums[r]);
        return j+1;
    }
    //在[l,r]中找到第index小的数
    int quickSelect(vector<int> &nums,int l,int r) {
    
        rand_pos(nums,l,r);
        int pos = partition(nums,l,r);
        if(pos - 1 > l) {
            quickSelect(nums,l,pos-1);
        }
    
        if(pos + 1 < r) {
            quickSelect(nums, pos + 1, r);
        }
    
        return 0;
    }
    
    int quickSort(vector<int>& nums) {
        srand(time(0));
        int n = nums.size();
        int ans = quickSelect(nums,0,n-1);
        return ans;
    }
    
    
    int main(){
        vector<int>v = {5,4,3,2,1};
        quickSort(v);
        for(auto i:v) {
            cout << i << " ";
        }
        return 0;
    }
    
    
  • 相关阅读:
    String和enum的互相转换
    LeetCode: Sort Colors
    LeetCode: Subsets II
    LeetCode: Spiral Matrix II
    LeetCode: Subsets
    LeetCode: Sum Root to Leaf Numbers
    LeetCode: Sqrt(x)
    LeetCode: Sudoku Solver
    LeetCode: Spiral Matrix
    LeetCode: Substring with Concatenation of All Words
  • 原文地址:https://www.cnblogs.com/hh13579/p/15702676.html
Copyright © 2011-2022 走看看