代码随想录--排序算法

912.排序数组

快速排序

思路:

		1.  设置一个pivot2. 将小于nums[pivot]的值 放在左边3. 将 大于nums[pivot]的值  放在 右边4. 递归调用

注意:必须先比较nums[high] 与pivot

代码:

class Solution {int partition(vector<int>&nums, int low, int high){int pivot = nums[low];while(low<high){while(low <high && nums[high]>=pivot){high--;}nums[low] = nums[high];while(low<high && nums[low]<=pivot){low++;}nums[high] = nums[low];}nums[low] = pivot;return low;}void quiksort(vector<int>&nums, int low, int high){if(low<high){int pos = partition(nums, low, high);quiksort(nums, low, pos-1);quiksort(nums, pos+1, high);}}public:vector<int> sortArray(vector<int>& nums) {quiksort(nums, 0, (int)nums.size()-1);return nums;}
};

在这里插入图片描述

堆排序

思路:

1.构造大顶堆   
2. 取出堆顶元素
3. 构造大顶堆
4. 取出堆顶元素	将堆顶元素放入末尾,下次构造大顶堆时不考虑

注意:
代码:

class Solution {void buildMaxHeap(vector<int>& nums) {int n = nums.size();for (int i = (n - 1) / 2; i >= 0; --i) {maxHeapify(nums, i, n);}}void maxHeapify(vector<int>& nums, int i, int n) {while (i * 2 + 1 < n) {// 代表当前 i 节点的左右儿子;// 超出数组大小则代表当前 i 节点为叶子节点,不需要移位int lSon = 2 * i + 1;int rSon = 2 * i + 2;int large = i;if (lSon < n && nums[lSon] > nums[i]) large = lSon;if (rSon < n && nums[rSon] > nums[large]) large = rSon;if (large != i) {swap(nums[i], nums[large]);// 迭代判断对应子节点及其儿子节点的大小关系i = large;} else {break;}}}public:vector<int> sortArray(vector<int>& nums) {// heapSort 堆排序int n = nums.size();// 将数组整理成大根堆buildMaxHeap(nums);for (int i = n - 1; i >= 1; --i) {// 依次弹出最大元素,放到数组最后,当前排序对应数组大小 - 1swap(nums[0], nums[i]);--n;maxHeapify(nums, 0, n);}return nums;}
};

归并排序

思路: 将有序序列 合并成一个
注意:
代码:

class Solution {vector<int> tmp;void mergeSort(vector<int>& nums, int l, int r) {if (l >= r) return;int mid = (l + r) >> 1;mergeSort(nums, l, mid);mergeSort(nums, mid + 1, r);int i = l, j = mid + 1;int cnt = 0;while (i <= mid && j <= r) {if (nums[i] <= nums[j]) {tmp[cnt++] = nums[i++];}else {tmp[cnt++] = nums[j++];}}while (i <= mid) {tmp[cnt++] = nums[i++];}while (j <= r) {tmp[cnt++] = nums[j++];}for (int i = 0; i < r - l + 1; ++i) {nums[i + l] = tmp[i];}}
public:vector<int> sortArray(vector<int>& nums) {tmp.resize((int)nums.size(), 0);mergeSort(nums, 0, (int)nums.size() - 1);return nums;}
};

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/765032.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

无人机采集图像的相关知识

1.飞行任务规划 一般使用飞行任务规划软件进行飞行任务的设计&#xff0c;软件可以自动计算相机覆盖和图像重叠情况。比如ArduPilot (ArduPilot - Versatile, Trusted, Open) 和UgCS (http://www.ugcs.com)是两个飞行任务规划软件&#xff0c;可以适用大多数无人机系统。 2.图…

每日shell脚本之自动配置Prometheus.yml并支持选择监控的节点数量、输入自定义IP和端口设置

每日shell脚本之自动配置Prometheus.yml并支持选择监控的节点数量、输入自定义IP和端口设置 #!/bin/bash# 获取用户输入的节点数量 read -p "请输入要监控的节点数量&#xff1a; " node_count# 生成Prometheus.yml配置文件 cat << EOF > Prometheus.yml g…

Vue 中给 data 中的对象属性添加一个新的属性时会发生什么?如何解决?

<template> <div><ul><li v-for"value in obj" :key"value"> {{value}} </li> </ul> <button click"addObjB">添加 obj.b</button> </div> </template><script>export defau…

QT作业。。

1.使用手动连接&#xff0c;将登录框中的取消按钮使用t4版本的连接到自定义的槽函数中&#xff0c;在自定义的槽函数中调用关闭函数将登录按钮使用t5版本的连接到自定义的槽函数中&#xff0c;在槽函数中判断u界面上输入的账号是否为"admin"&#xff0c;密码是否为&q…

【计算机视觉】Gaussian Splatting源码解读补充(一)

本文旨在补充gwpscut创作的博文学习笔记之——3D Gaussian Splatting源码解读。 Gaussian Splatting Github地址&#xff1a;https://github.com/graphdeco-inria/gaussian-splatting 论文地址&#xff1a;https://repo-sam.inria.fr/fungraph/3d-gaussian-splatting/3d_gauss…

mac 用electron-builder打包,如何切换到notarytool

背景&#xff1a;altool已经被遗弃了&#xff0c;我们必须要使用notarytool进行打包,如何从altool切换到notarytool 在打包的配置中afterSign执行的js中 加入teamId和tool teamId在你的开发者账号中可以获取到

二、SpringBoot3 配置文件

本章概要 统一配置管理概述属性配置文件使用YAML 配置文件使用批量配置文件注入多环境配置和使用 2.1 统一配置管理概述 SpringBoot工程下&#xff0c;进行统一的配置管理&#xff0c;你想设置的任何参数&#xff08;端口号、项目根路径、数据库连接信息等等)都集中到一个固定…

docker镜像复制与常见命令

一、前言 最近通过阿里的镜像仓库远程拉取镜像&#xff0c;发现以前的版本不见了&#xff0c;拉取了最新的镜像&#xff0c;有发现版本不配问题。那么想使用老版本的镜像那就要从别的环境获取。于是就需要进行离线镜像复制&#xff0c;打包&#xff0c;上传&#xff0c;重新导入…

安卓Java面试题 191- 195

191. 简述Android启动一个应用的流程是怎样的呢 ?我们都知道平常在使用 Activity的过程中,只需要调用Activity的startActivity方法,传入适当的参数就可以启动一个我们想要启动的Activity 了,但是你知道这个过程中经历了些什么吗?今天我想从FrameWork层面解释下从系统启动到…

用conda和pip隔离Python环境

用conda和pip隔离Python环境 在同一台服务器上运行多个不同的项目&#xff0c;多个项目依赖同一个包的不同版本&#xff0c;如果这些项目都使用全局环境&#xff0c;会发生依赖包冲突&#xff0c;因此有必要引入虚拟环境对不同的项目依赖进行管理。Python的virtualenv包可以用…

6个免费的ChatGPT网站

AI 大模型的出现给时代带来了深远的影响&#xff1a; 改变了产业格局&#xff1a;AI 大模型的发展推动了人工智能技术在各行业的广泛应用&#xff0c;改变了传统产业的运作方式&#xff0c;促进了新兴产业的崛起&#xff0c;如智能驾驶、医疗健康、金融科技等。提升了科学研究…

设计模式:面向对象设计的六大原则

目录 前言六大原则 单一职责原则开闭原则里氏替换原则依赖倒置原则接口隔离原则迪米特原则总结 前言 很久没有写博客了&#xff0c;一直给自己找借口说太忙了&#xff0c;过几天有空再写&#xff0c;几天之后又几天&#xff0c;时间就这么快速的消逝。说到底就是自己太懒了&a…

MNN 执行推理(九)

系列文章目录 MNN createFromBuffer&#xff08;一&#xff09; MNN createRuntime&#xff08;二&#xff09; MNN createSession 之 Schedule&#xff08;三&#xff09; MNN createSession 之创建流水线后端&#xff08;四&#xff09; MNN Session 之维度计算&#xff08;五…

编程思想-状态机

前言 对于开发者来说&#xff0c;状态机思想的重要性体现在多个方面&#xff0c;无论是设计复杂的系统还是处理简单的逻辑流程&#xff0c;状态机都能提供清晰、可维护且易于扩展的解决方案。以下是状态机思想对开发者而言的几个关键重要性&#xff1a; 逻辑清晰&#xff1a;状…

两台电脑简单的通信过程详解(经过两个路由器,不同网段)

一、eNSP拓扑图 二、配置4台电脑的IP地址、子网掩码、网关地址。 三、配置路由器 注意拓扑图的接口与本博客是否相符&#xff0c;判断以下命令中的ip是否需要修改。 1.AR1-接口对应IP <Huawei>sys #进入系统视图 [Huawei]int g0/0/0 #进入0/0/0接口 [Huawei-GigabitE…

【计算机网络篇】数据链路层(1)数据链路层的地位,问题

文章目录 &#x1f354;数据链路层在网络体系结构中的地位&#x1f354;链路&#xff0c;数据链路&#xff0c;帧&#x1f354;数据链路层的三个重要问题&#x1f95a;封装成帧和透明传输&#x1f95a;差错检测&#x1f95a;可靠传输 &#x1f354;数据链路层在网络体系结构中的…

飞天使-k8s知识点26-kubernetes温故知新1-pod

文章目录 创建一个podpod的启动命令和参数更改pod 镜像拉取策略 pod 的三种探针pod 探针的实现方式prestop 和 prestart 创建一个pod apiVersion: v1 # 必选&#xff0c;API 的版本号 kind: Pod # 必选&#xff0c;类型 Pod metadata: # 必选&#xff0c;元数据name: nginx # …

Linux文件 profile、bashrc、bash_profile区别

Linux系统中&#xff0c;有三种文件 出现的非常频繁&#xff0c;那就是 profile、bash_profile、bashrc 文件。 1、profile 作用 profile&#xff0c;路径&#xff1a;/etc/profile&#xff0c;用于设置系统级的环境变量和启动程序&#xff0c;在这个文件下配置会对所有用户…

欣瑞达信息技术邀您莅临2024长三角快递物流展

2024数字物流技术展 2024新能源商用车及物流车展 2024电商物流包装展 2024冷链物流展 2024年7月8-10日 | 杭州国际博览中心 参展企业介绍 深圳市欣瑞达信息技术有限公司&#xff08;曾用名&#xff1a;深圳市欣瑞达液晶显示技术有限公司&#xff09;成立于1997年&#xff0c;是…

【Unity】Stream最好用的Selfhost开源轻量服务

【背景】 有好几种场景的投屏或者远控应用希望实现&#xff0c;无论用哪种方式&#xff0c;都绕不开如何构建服务这一关。 【分析】 外网有很多直接付费使用的信令传输类型或是提供流服务的服务器&#xff0c;但我的目标场景是断绝外网的局域网&#xff0c;而且付费也总觉得…