【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;
    }
};
相关推荐
_Power_Y2 分钟前
Java面试常用算法api速刷
java·算法·面试
艾醒(AiXing-w)2 分钟前
大模型面试题剖析:模型微调中冷启动与热启动的概念、阶段与实例解析
人工智能·深度学习·算法·语言模型·自然语言处理
天选之女wow17 分钟前
【代码随想录算法训练营——Day32】动态规划——509.斐波那契数、70.爬楼梯、746.使用最小花费爬楼梯
算法·leetcode·动态规划
红衣小蛇妖24 分钟前
LeetCode-704-二分查找
java·算法·leetcode·职场和发展
rongqing201929 分钟前
问题记录:一个简单的字符串正则匹配算法引发的 CPU 告警
算法
WIN赢32 分钟前
【二叉树的递归算法与层序遍历算法】
数据结构
无限进步_1 小时前
C语言字符串与内存操作函数完全指南
c语言·c++·算法
rengang661 小时前
07-逻辑回归:分析用于分类问题的逻辑回归模型及其数学原理
人工智能·算法·机器学习·分类·逻辑回归
Zzzzmo_1 小时前
【Java】杨辉三角、洗牌算法
java·数据结构·算法
闻缺陷则喜何志丹1 小时前
【C++贪心】P10537 [APIO2024] 九月|普及+
c++·算法·贪心·洛谷