【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;
    }
};
相关推荐
Highcharts.js18 小时前
教程:基于 React + Highcharts 构建一个单页应用程序、按需数据拉取与图表渲染
开发语言·前端·数据结构·react.js·前端框架·highcharts·页面应用
拳里剑气21 小时前
C++算法:BFS解决FloodFill算法
c++·算法·bfs·宽度优先
wanderist.1 天前
Lambda表达式在算法竞赛中的应用
java·开发语言·算法
稚南城才子,乌衣巷风流1 天前
支配树(Dominator Tree)详解:概念、算法与应用
算法
稚南城才子,乌衣巷风流1 天前
动态开点:原理、实现与应用场景
数据结构·算法
yyds_yyd_100861 天前
1464. 数组中两元素的最大乘积(2026.07.27)
数据结构·c++·算法·leetcode
KaMeidebaby1 天前
卡梅德生物技术快报 | 核酸适配体文库测序:核酸适配体文库测序的技术原理、实验流程与数据解析
前端·网络·数据库·人工智能·算法
geovindu1 天前
CSharp: Breadth First Search Algorithm and Depth First Search Algorithm
开发语言·后端·算法·c#·.net·搜索算法
ekkoalex1 天前
训练框架以及算法实现的框架
算法