【912.排序数组】

目录

一、题目描述

二、算法原理

2.1快速排序

2.2归并排序

三、代码实现

3.1快排代码实现

cpp 复制代码
class Solution {
public:
    int getRandom(int left,int right,vector<int>& nums)
    {
        return nums[rand()%(right-left+1)+left];
    }
    void _sortArray(int left,int right,vector<int>& nums)
    {
        if(left>right)
        {
            return ;
        }
        int key=getRandom(left,right,nums);
        int l=left-1,r=right+1,i=left;
        while(i<r)
        {
            if(nums[i]<key)
                swap(nums[++l],nums[i++]);
            else if(nums[i]>key)
                swap(nums[i],nums[--r]);
            else
                i++;
        }
        _sortArray(left,l,nums);
        _sortArray(r,right,nums);
    }
    vector<int> sortArray(vector<int>& nums) 
    {
        srand(time(NULL));
        _sortArray(0,nums.size()-1,nums);
        return nums;
    }
};

3.2归并代码实现

cpp 复制代码
class Solution {
public:

    void mergeSort(vector<int>& nums,int left,int right)
    {
        if(left>=right)
        {
            return;
        }
        int mid=left+(right-left)/2;
        mergeSort(nums,left,mid);
        mergeSort(nums,mid+1,right);
        //合并两个有序数组
        vector<int> v(right-left+1);
        int cur1=left,cur2=mid+1,i=0;
        while((cur1<=mid)&&(cur2<=right))
        {
            if(nums[cur1]<nums[cur2])
            {
                v[i++]=nums[cur1++];
            }
            else
            {
                v[i++]=nums[cur2++];
            }
        }

        while(cur1<=mid) v[i++]=nums[cur1++];
        while(cur2<=right) v[i++]=nums[cur2++];

        //还原数组
        for(int i=left;i<=right;i++)
        {
            nums[i]=v[i-left];
        }

    }
    vector<int> sortArray(vector<int>& nums) 
    {
        mergeSort(nums,0,nums.size()-1);
        return nums;
    }
};
相关推荐
稚辉君.MCA_P8_Java6 小时前
Gemini永久会员 Java实现的暴力递归版本
java·数据结构·算法
冯诺依曼的锦鲤6 小时前
算法练习:差分
c++·学习·算法
有意义6 小时前
栈数据结构全解析:从实现原理到 LeetCode 实战
javascript·算法·编程语言
鹿鹿鹿鹿isNotDefined6 小时前
逐步手写,实现符合 Promise A+ 规范的 Promise
前端·javascript·算法
封奚泽优7 小时前
下降算法(Python实现)
开发语言·python·算法
im_AMBER7 小时前
算法笔记 16 二分搜索算法
c++·笔记·学习·算法
高洁017 小时前
【无标具身智能-多任务与元学习】
神经网络·算法·aigc·transformer·知识图谱
leoufung7 小时前
逆波兰表达式 LeetCode 题解及相关思路笔记
linux·笔记·leetcode
识醉沉香7 小时前
广度优先遍历
算法·宽度优先
中國龍在廣州7 小时前
现在人工智能的研究路径可能走反了
人工智能·算法·搜索引擎·chatgpt·机器人