LeetCode 912 - Sorting an array

Title Description

912. sorted array

Solution one: fast row

class Solution {
public:
    int partition(vector<int>& nums, int l, int r){
        int pivot = l;
        for(int i=l+1;i<=r;i++)
        {
            if(nums[i]<nums[l]) swap(nums[i], nums[++pivot]);
        }
        swap(nums[pivot], nums[l]);
        return pivot;
    }
    int randomized_partition(vector<int>& nums, int l, int r){
        int i = rand() % (r-l+1)+l;
        swap(nums[l], nums[i]);
        return partition(nums, l, r);
    }
    void randomized_quicksort(vector<int>& nums, int l, int r)
    {
        if(l<r)
        {
            int pos = randomized_partition(nums, l, r);
            randomized_quicksort(nums, l, pos-1);
            randomized_quicksort(nums, pos+1, r);
        }
    }
    vector<int> sortArray(vector<int>& nums) {
        srand((unsigned)time(NULL));
        randomized_quicksort(nums, 0, (int)nums.size()-1);
        return nums;
    }
};

Solution two: Heap row

class Solution {
public:

    void adjustheap(vector<int>& nums, int i, int len){
        int tmp = nums[i];
        for(int k=i*2+1;k<len;k=k*2+1) // 从i节点的左节点开始重建
        {
            if(k+1<len && nums[k]<nums[k+1]) k++; // 如果左子节点小于右子节点,则让k指向右子节点
            if(nums[k]>tmp) // 如果子节点大于父节点,将子节点赋值给父节点(不用进行交换)
            {
                nums[i] = nums[k];
                i = k;
            }
            else break;
        }
        nums[i] = tmp; // 将tmp放到最终位置
    }

    void heapsort(vector<int>& nums){
        //构建大顶堆
        for(int i=nums.size()/2-1;i>=0;i--) 
            adjustheap(nums, i, nums.size());
        // 弹出最大元素+调整堆
        for(int i=nums.size()-1;i>=1;i--)
        {
            swap(nums[0], nums[i]); // 弹出最大顶堆的堆顶放在最后
            adjustheap(nums, 0, i); // 重建大顶堆
        }
    }

    vector<int> sortArray(vector<int>& nums) {
        heapsort(nums);
        return nums;
    }
};
Published 152 original articles · won praise 22 · views 30000 +

Guess you like

Origin blog.csdn.net/qq_38204302/article/details/105247743
912
Recommended