C++ (快排和归并排序)


1.归并排序  

class Solution {
public:
    void mergeSort(vector<int>&nums,int l,int r){
        if(l>=r) return;
        int mid = l+(r-l)/2;
        mergeSort(nums,l,mid);
        mergeSort(nums,mid+1,r);

        
        int l1 = mid-l+1;
        int l2 = r-mid;

        vector<int> a(l1);
        vector<int> b(l2);

        for(int i = 0;i){
            a[i] = nums[l+i];
        }
        for(int j = 0;j){
            b[j] = nums[mid+1+j];
        }

        int i =0,j=0;
        int k = l; 
        while(il2){
            if(a[i];
            else nums[l++] = a[i],j++;
        }
        while(i<l1){
            nums[l++] = a[i],i++;
        } 
        while(j<l2){
            nums[l++] = b[j],j++;
        }
    }


    void quickSort(vector<int>&nums, int l,int r){
        if(l>=r) return;
        swap(nums[l],nums[l+rand()%(r-l+1)]);
        int p = nums[l];
        int i = l;int j = r;
        while(i<j){
            while(i=p)j--;
            while(i;
            swap(nums[i],nums[j]);
        }
        swap(nums[l],nums[i]);
        quickSort(nums, l, i-1);
        quickSort(nums, i+1, r);
    }
    vector<int> sortArray(vector<int>& nums) {
       quickSort(nums,0,nums.size()-1); 
       return nums;
    }
};

2.快排

class Solution {
public:

    void quickSort(vector<int>&nums, int l,int r){
        if(l>=r) return;
        swap(nums[l],nums[l+rand()%(r-l+1)]);
        int p = nums[l];
        int i = l;int j = r;
        while(i<j){
            while(i=p)j--;
            while(i;
            swap(nums[i],nums[j]);
        }
        swap(nums[l],nums[i]);
        quickSort(nums, l, i-1);
        quickSort(nums, i+1, r);
    }
    vector<int> sortArray(vector<int>& nums) {
       quickSort(nums,0,nums.size()-1); 
       return nums;
    }
};

相关