【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;
    }
};
相关推荐
scx201310049 分钟前
20250814 最小生成树和重构树总结
c++·算法·最小生成树·重构树
阿巴~阿巴~17 分钟前
冒泡排序算法
c语言·开发语言·算法·排序算法
散11230 分钟前
01数据结构-交换排序
数据结构·算法
yzx9910131 小时前
Yolov模型的演变
人工智能·算法·yolo
weixin_307779132 小时前
VS Code配置MinGW64编译SQLite3库
开发语言·数据库·c++·vscode·算法
无聊的小坏坏2 小时前
拓扑排序详解:从力扣 207 题看有向图环检测
算法·leetcode·图论·拓扑学
wwww.bo2 小时前
机器学习(决策树)
算法·决策树·机器学习
辞--忧2 小时前
深入浅出决策树
算法·决策树·机器学习
Y200309162 小时前
决策树总结
算法·决策树·机器学习
lynn8570_blog2 小时前
低端设备加载webp ANR
前端·算法