排序算法学习记录-快速排序

快速排序

快速排序关键在于确定一个中间值,使得小于这个中间值的数在左边,大于这个中间值的数在右边。那么中间值该如何确定呢?有以下几种做法

  • 首元素,也就是arr[l]
  • 尾元素,也就是arr[r]
  • 中间元素,也就是arr[(l+r)>>1]这里是位运算,等价于arr[(l+r)/2^1]
  • 中间的一个随机元素
void Qsort(int arr[],int l,int r){if(l>=r) return;int begin = l,end = r,x = arr[(l+r)>>1];//上面是位运算,表示(l+r)/2^1while(begin<=end){while(arr[begin]<x) begin++;while(arr[end]>x) end--;if(begin<=end) swap(&arr[begin++],&arr[end--]);}Qsort(arr,l,end);Qsort(arr,begin,r);
}
//除了和x的比较不带=,其他的都带

快速排序相关变体

题目如下:
在这里插入图片描述
求第k大(小)的数,一种做法是堆排序把前k个数找出来就行,另一种就是利用快速排序的思想去做。现暂把中间的分界点称为pivot,左边的数都小于pivot,右边的数都大于pivot。那么假如左边有m个数,右边有n个数。求第k大的数。如果k<n,那么这个数肯定在右边,反之这个数肯定在左边。以此来缩小这个数所在的范围。

归并排序

归并排序的核心思想在于将两个有序的数组合并为一个全局有序的数组。

int tmp[100000];
void merge_sort(int arr[],int begin,int end){if(begin>=end) return;int mid = (begin+end)>>1;merge_sort(arr,begin,mid);merge_sort(arr,mid+1,end);int l_begin = begin,r_begin = mid+1,tmp_index = 0;while(l_begin<=mid && r_begin<=end){if(arr[l_begin]<=arr[r_begin]) tmp[tmp_index++] = arr[l_begin++];else tmp[tmp_index++] = arr[r_begin++];}while(l_begin<=mid) tmp[tmp_index++] = arr[l_begin++];while(r_begin<=end) tmp[tmp_index++] = arr[r_begin++];int k = 0;while(begin<=end){arr[begin++] = tmp[k++];}
}

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

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

相关文章

JavaScript中的事件委托(event delegation)

聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ JavaScript事件委托⭐ 事件冒泡&#xff08;Event Bubbling&#xff09;⭐ 事件委托的优点⭐ 如何使用事件委托⭐ 写在最后 ⭐ 专栏简介 前端入门之旅&#xff1a;探索Web开发的奇妙世界 记得点击上方或者右侧链接订阅本专栏哦 几何带你启…

CocosCreator3.8研究笔记(二)windows环境 VS Code 编辑器的配置

一、设置文件显示和搜索过滤步骤 为了提高搜索效率以及文件列表中隐藏不需要显示的文件&#xff0c; VS Code 需要设置排除目录用于过滤。 比如 cocoscreator 中&#xff0c;编辑器运行时会自动生成一些目录&#xff1a;build、temp、library&#xff0c; 所以应该在搜索中排除…

电商项目part10 高并发缓存实战

缓存的数据一致性 只要使用到缓存&#xff0c;无论是本地内存做缓存还是使用 redis 做缓存&#xff0c;那么就会存在数据同步的问题。 先读缓存数据&#xff0c;缓存数据有&#xff0c;则立即返回结果&#xff1b;如果没有数据&#xff0c;则从数据库读数据&#xff0c;并且把…

怎么把pdf压缩的小一点?

怎么把pdf压缩的小一点&#xff1f;在我们日常的学习和工作中&#xff0c;PDF文件是一个非常常见和有用的文件格式&#xff0c;并且受到很多小伙伴的喜欢。有时候&#xff0c;一些PDF文件可能会很大&#xff0c;造成pdf文件较大的原因其实很明确&#xff0c;主要是因为pdf文件中…

【LeetCode算法系列题解】第46~50题

CONTENTS LeetCode 46. 全排列&#xff08;中等&#xff09;LeetCode 47. 全排列 II&#xff08;中等&#xff09;LeetCode 48. 旋转图像&#xff08;中等&#xff09;LeetCode 49. 字母异位词分组&#xff08;中等&#xff09;LeetCode 50. Pow(x, n)&#xff08;中等&#xf…

华为云云服务器评测 | 从零开始:云耀云服务器L实例的全面使用解析指南

文章目录 一、前言二、云耀云服务器L实例要点介绍2.1 什么是云耀云服务器L实例2.2 云耀云服务器L实例的产品定位2.3 云耀云服务器L实例优势2.4 云耀云服务器L实例支持的镜像与应用场景2.5 云耀云服务器L实例与弹性云服务器&#xff08;ECS&#xff09;区别 三、购买与配置云耀云…

【100天精通Python】Day51:Python 数据分析_数据分析入门基础与Anaconda 环境搭建

目录 1 科学计算和数据分析概述 2. 数据收集和准备 2.1 数据收集 2.1.1 文件导入&#xff1a; 2.1.2 数据库连接&#xff1a; 2.1.3 API请求&#xff1a; 2.1.4 网络爬虫&#xff1a; 2.2 数据清洗 2.2.1 处理缺失值&#xff1a; 2.2.2 去除重复值&#xff1a; 2.2…

dlopen “libnvcuvid.so“ failed!

在使用NVIDIA DALI库进行视频数据处理时&#xff0c;出现了以上打开libnvcuvid.so动态库错误的问题&#xff0c;如下图所示&#xff1a; libnvcuvid.so是使用CUDA进行硬编解码需要的一个库&#xff0c;使用NVIDIA DALI进行视频处理时会依赖它。 本人是在Docker容器中运行的程序…

langchain介绍之-Prompt

LangChain 是一个基于语言模型开发应用程序的框架。它使得应用程序具备以下特点&#xff1a;1.数据感知&#xff1a;将语言模型与其他数据源连接起来。2.代理性&#xff1a;允许语言模型与其环境进行交互 LangChain 的主要价值在于&#xff1a;组件&#xff1a;用于处理语言模型…

[华为云云服务器评测] Unbutnu添加SSH Key、编译启动Springboot项目

系列文章目录 第一章 [linux实战] 华为云耀云服务器L实例 Java、node环境配置 第二章 [linux实战] Unbutnu添加SSH Key、启动Springboot项目 文章目录 系列文章目录前言一、任务拆解二、配置git,添加SSH Key2.1、登录远程主机2.2、配置git用户名和邮箱2.3、生成SSH key2.4、查…

【DevOps视频笔记】6 - 7. Jenkins 介绍 和 安装

一、Integrate 工具 二、Jenkins 介绍 1. Jenkins 最主要的工作 2. CI / CD 可以理解为&#xff1a; 2.1 CI 过程 2.2 CD 过程 三、Jenkins 安装 1. 安装准备工作 2. 安装 Jenkins Stage 1&#xff1a;拉取 jenkins 镜像 Stage 2&#xff1a;编写docker-compose.yml St…

小白开始学习C++

第一节&#xff1a;控制台输出hello word&#xff01; #include<iostream> //引入库文件 int main() { //控制台输出 hello word! 之后回车 std::cout << "hello word!\n"; #include<iostream> //引入库文件int main() {//控制台输出…

docker 笔记6:高级篇 DockerFile解析

目录 1.是什么&#xff1f; 2.构建三步骤 3.DockerFile构建过程解析 3.1 Dockerfile内容基础知识 3.2Docker执行Dockerfile的大致流程 总结 4.DockerFile常用保留字指令 5.案例&#xff1a;自定义镜像 5.1 要求&#xff1a; Centos7镜像具备vimifconfigjdk8 5.2编写 5…

Android 1.2.1 使用Eclipse + ADT + SDK开发Android APP

1.2.1 使用Eclipse ADT SDK开发Android APP 1.前言 这里我们有两条路可以选&#xff0c;直接使用封装好的用于开发Android的ADT Bundle&#xff0c;或者自己进行配置 因为谷歌已经放弃了ADT的更新&#xff0c;官网上也取消的下载链接&#xff0c;这里提供谷歌放弃更新前最新…

第12节——生命周期

一、概念 生命周期指 React 组件从装载至卸载的全过程&#xff0c;这个过程内置多个函数供开发者在组件的不同阶段执行需要的逻辑。 状态组件主要通过 3 个生命周期阶段来管理&#xff0c;分别是 挂载阶段&#xff08;MOUNTING&#xff09;&#xff0c;更新阶段&#xff08;U…

TIA博途从V15.1版本升级到V16后,下载配方时出错,动作异常终止

TIA博途从V15.1版本升级到V16后,下载配方时出错,动作异常终止 1. 读取配方的时候没有问题,完全正常,没有任何错误提示。 2. 但是在下载的时候,就提示了“出错。动作异常终止” 根据以往的经验分析,有可能是配方变量里面没有相对应的地址时候下载会出错,但是配方画面相对…

Windows NUMA编程实践 – 处理器组、组亲和性、处理器亲和性及版本变化

Windows在设计之初没有考虑过对大数量的多CPU和NUMA架构的设备的支持&#xff0c;大部分关于CPU的设计按照64个为上限来设计。核心数越来越多的多核处理器的进入市场使得微软不得不做较大的改动来进行支持&#xff0c;因此Windows 的进程、线程和NUMA API在各个版本中行为不一样…

基于Java+SpringBoot+Vue前后端分离大学生智能消费记账系统设计和实现

博主介绍&#xff1a;✌全网粉丝30W,csdn特邀作者、博客专家、CSDN新星计划导师、Java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专…

国产10米分辨率的卫星介绍、下载和处理教程

10米分辨率的资源卫星介绍、下载和处理教程 简介 说起免费的10米分辨率卫星影像,大家首先想到的是sentinel卫星。但其实还有我国的中巴地球资源卫星04星(CBERS04)。 中巴地球资源卫星(China Brazil Earth Resources Satellite, CBERS)是中国和巴西共同投资、联合研制的地球…

PCIe DL_Feature详解

DL_Feature的引入 Data Link Control and Management State Machine在PCIe Gen4引入了DL_Feature这个状态&#xff0c;该状态主要用来协商PCIe link 两端是否支持新的DL Feature&#xff0c;目前为止DL Feature只引入了Scaled Flow Control 来提高Gen4及以上的效率。   DL_Fe…