当前位置: 首页 > news >正文

【剑斩OFFER】算法的暴力美学——排序数组

一、题目描述

二、算法原理

本题使用快排和归并排序都能解决这道题目,这里使用的归并排序,归并排序的思想和快排的思想都是进行分治的思想,对于归并排序的实现和思路,请各位看这篇博客:https://blog.csdn.net/2403_84958571/article/details/147355114?fromshare=blogdetail&sharetype=blogdetail&sharerId=147355114&sharerefer=PC&sharesource=2403_84958571&sharefrom=from_link

这篇博客超级详细的,这里就不再赘述了。

三、代码实现

class Solution { public: vector<int> sortArray(vector<int>& nums) { vector<int> tmp(nums.size());//创建一数组,防止后面操作干扰到原数组 nums Quicksort(0,nums.size() - 1,nums,tmp); return nums; } void Quicksort(int l,int r,vector<int>& nums,vector<int>& tmp) { if(l >= r) return; int keyi = l + (r - l) / 2; Quicksort(l,keyi,nums,tmp);//左边:【 l , keyi 】 Quicksort(keyi + 1,r,nums,tmp);//右边:【keyi + 1,r 】 int begin1 = l,end1 = keyi;//左边数组 int begin2 = keyi + 1,end2 = r;//右边数组 int index = l;//遍历起始点 while(begin1 <= end1 && begin2 <= end2)//比较遍历 { if(nums[begin1] > nums[begin2]) tmp[index++] = nums[begin2++]; else tmp[index++] = nums[begin1++]; } while(begin1 <= end1) tmp[index++] = nums[begin1++];//把左边剩余的数字放到 tmp while(begin2 <= end2) tmp[index++] = nums[begin2++];//把右边剩余的数字放到 tmp for(int i = l;i < index;i++) nums[i] = tmp[i];//把 tmp 里面的数字放回到原数组 nums } };
http://www.cnnetsun.cn/news/1381.html

相关文章:

  • 【剑斩OFFER】算法的暴力美学——交易逆序对的总数
  • 【全栈硬核实战】从零手搓一个基于 Gin + JS 的鉴权闭环系统
  • 【每天一个AI小知识】:什么是生成式AI?
  • C#字符串操作:11个必备方法全解析
  • Spring AOP场景2——数据脱敏(附带源码)
  • linux知识点-服务相关
  • 基于springboot会议室管理系统的设计与实现-计算机毕设 附源码 30986
  • Python 第三方库的安装与卸载指南
  • 安装 rustrover ,本来一个 IDE 能实现全部能力的情况下JetBarins 搞了N个编辑器
  • RustRover 新建项目的前提之一: Install Rustup
  • brew 安装 rustup ,以及初始化 rustup default stable
  • brew 安装 restup 的全过程 rustup default stable ,以及错误
  • 通过 Brew 安装 rustup 后,要在 rustrover 配置; 以及 Brew 之后需要 source $HOME/.cargo/env
  • 被京能数智笔记播客狠狠种草!文章一键转 4 种结构化笔记,私域效率党直接封神
  • 第十四章聚类方法理论及Python实现
  • VUE快速入门
  • Ajax-快速学习
  • Incoloy 907高性能的铁镍钴基高温合金Incoloy907英科耐尔合金
  • Incoloy945镍铁铬合金Incoloy 945应用领域在‌高强度紧固件、阀门、涡轮部件‌
  • Incoloy945X(UNS N09945)镍铁铬基沉淀硬化合金Incoloy 945X合金板材 合金锻件
  • Incoloy 020是一种高性能的‌镍-铁-铬合金‌Incoloy020棒料 锻件 带材
  • 如何在GraniStudio零代码平台搭建MES的零代码生产监控看板开发?
  • 如何在GraniStudio零代码将算子封装成方法,实现封装算子功能?
  • GraniStudio零代码平台支持哪些品牌的相机?
  • GraniStudio零代码平台支持多少种厂家IO模块和IO模块型号?
  • GraniStudio零代码平台通信(如 TCP服务器 )工具支持几种?
  • GraniStudio零代码平台支持OPC协议吗?
  • GraniStudio零代码平台支持多少种数据库?分别是什么数据库?
  • 如何使用GraniStudio零代码平台类型转换算子?哪些数据类型之间可以互转?
  • GraniStudio零代码平台支持多少种处理字符串方式?分别都是使用什么方式处理?