排序

【常见的六大排序算法】插入排序、希尔排序、选择排序、冒泡排序、堆排序、快速排序 在实现排序前,我们要先知道什么是排序。排序:简单的来说就是把一串数据按照一定的方式依次排序。例如:可以按照数字的大小升序或降序排列,或者按照英文字母的先后顺序排列等。使用这一系列的方式,就可以将一串无序状态下的数据排列成有序的数据。 阅读详情

文章目录

快速排序

完整代码

#include<iostream>
using namespace std;

const int N = 1000010;
int a[N];

void QuickSort(int a[], int left, int right) {
  if (left >= right) return;
  int l = left - 1, r = right + 1, x = a[left + right >> 1];
  while (l < r) {
    do l++; while (a[l] < x);
    do r--; while (a[r] > x);
    if (l < r) swap(a[l], a[r]);
  }
  QuickSort(a, left, r), QuickSort(a, r + 1, right);
}

int main() {
  int n;
  cin >> n;
  for (int i = 0; i < n; i++)
    scanf("%d", &a[i]);
  
  QuickSort(a, 0, n - 1);
  
  for (int i = 0; i < n; i++)
    printf("%d ", a[i]);
  return 0;
}

步骤分析:

void QuickSort(int a[], int left, int right) {
  if (left >= right) return;
  int l = left - 1, r = right + 1;
  int x = a[left + right >> 1];
  //如果写成int x = a[left + right + 1 >> 1];那么子区间范围也要修改
  while (l < r) {
    do l++; while (a[l] < x);
    do r--; while (a[r] > x);
    if (l < r) swap(a[l], a[r]);
  }
  QuickSort(a, left, r), QuickSort(a, r + 1, right);
  //QuickSort(a, left, l), QuickSort(a, l - 1, right);
}
  1. 脑袋中要有一个快速排序的动画。
  2. 快速排序的排序区间很容易写错!
  3. 快速排序最终必定使得左指针移动到右指针的右边一格。
  4. 代码注释中要深刻体会,可以用[1, 2]模拟。
七大排序算法:插入排序、希尔排序、选择排序、堆排序、冒泡排序、快速排序、归并排序 史上最全的排序讲解 阅读详情

相关推荐

【排序】插入排序,希尔排序

以上是对插入排序和希尔排序的分析,是一种新的排序思想,其中的种种知识点也很碎很多,希望大家能够有所收获。

2302_80220453的博客 1018

六大排序算法:插入排序、希尔排序、选择排序、冒泡排序、堆排序、快速排序

文章目录:1. 插入排序2.希尔排序 1. 插入排序 步骤: 1.从第一个元素开始,该元素可以认为已经被排序 2.取下一个元素tem,从已排序的元素序列从后往前扫描 3.如果该元素大于tem,则将该元素移到下一位 4.重复步骤3,直到找到已排序元素中小于等于tem的元素 5.tem插入到该元素的后面,如果已排序所有元素都大于tem,则将tem插入到下标为0的位置 6.重复步骤2~5 动图演示如下: 思路:   在待排序的元素中,假设前n-1个元素已有序,现将第n个元素插入到前面已经排好的序列中,使得前n个

HanMeng的博客 69万+

Ta-Lib源码解析(三):蜡烛图指标 (Candlestick Indicator) #(附Python重构代码和示意图)(补充中)

蜡烛图指标为识别K线形态的指标,笔者认为重点在于定义方式所提供的思路,背后的投资逻辑可以借鉴但不建议直接参考文档的翻译内容和源码逻辑存在不一致的现象,笔者分别列出中文百科中的定义和源码实际逻辑,供大家参考技术分析理论中的一些模糊词,ta-lib中给出了精确的定义源码

量化就是探索生活 3254

常见排序算法(插入排序,希尔排序,选择排序,堆排序,冒泡排序,快速排序,归并排序,计数排序,基数排序,桶排序)

常见排序算法(插入排序,希尔排序,选择排序,堆排序,冒泡排序,快速排序,归并排序,计数排序,基数排序,桶排序)

2301_80288511的博客 3162

使用vite+react+ts+Ant Design开发后台管理项目(四)

本文将引导开发者从零基础开始,运用、react、react-router、react-redux、Ant Design、less、tailwindcss、axios等前沿技术栈,构建一个高效、响应式的后台管理系统。通过详细的步骤和实践指导,文章旨在为开发者揭示如何利用这些技术工具,从项目构思到最终实现的全过程,提供清晰的开发思路和实用的技术应用技巧。使用vite+react+ts+Ant Design开发后台管理项目(一)使用vite+react+ts+Ant Design开发后台管理项目(二)

lbking666666的专栏 2007

使用Intel编译器编译OpenFOAM

本文总结了使用INTEL编译器编译OpenFOAM的过程

姜蜉蝣的博客 1550

【算法】排序算法(插入排序、希尔排序、选择排序、冒泡排序、快速排序、归并排序、基数排序、堆排序)

八大排序算法(插入排序、希尔排序、选择排序、冒泡排序、快速排序、归并排序、基数排序、堆排序)

酷酷的馫博客 1万+

数字化车间智能排产调度挑战赛(一)—— 数学模型

科大讯飞——数字化车间智能排产调度挑战赛。

Lyyyp的博客 5652

算法——十大排序(冒泡排序,选择排序,堆排序,插入排序,归并排序,快速排序,希尔排序,计数排序,基数排序,桶排序)

排序算法准备算法模板冒泡排序(Bubble Sort)定义执行流程代码实现选择排序(Selection Sort)定义执行流程代码实现插入排序(Insertion Sort)定义执行流程代码实现希尔排序(Shell Sort)定义执行流程代码实现堆排序(Heap Sort)定义执行流程代码实现归并排序(Merge Sort)定义执行流程代码实现快速排序(Quick Sort)定义执行流程代码实现计数排序(Counting Sort)定义执行流程代码实现基数排序(Radix Sort)定义执行流程代码实现桶排

mazouri的博客 5022

基于Simulink的IEEE33节点配电网仿真实战:从建模到分布式能源集成

本文详细介绍了基于Simulink的IEEE33节点配电网仿真实战,从基础建模到分布式能源集成。通过MATLAB脚本管理参数、搭建Simulink模块,并集成风机和光伏系统,实现高效配电网仿真。文章还涵盖潮流计算、故障分析及性能优化技巧,为电力系统仿真提供实用指导。

git9versioner的博客 991

PCL 建筑物点云立面和平面分割提取【2025最新版】

在建筑物点云中,立面点和平面点的法向量存在明显的差异,根据法向量在Z方向的分量设置相应得阈值即可实现立面点与平面点的分割。

点云侠的博客 1962

排序算法:插入排序、冒泡排序、选择排序、希尔排序、堆排序、快速排序、归并排序

排序算法相关总结,涉及的排序算法有:插入排序、冒泡排序、选择排序、希尔排序、堆排序、快速排序。

qq_53130059的博客 5646

YOLOv12中的A2C2f模块详解,涉及区域注意力模块(A2)和 R-ELAN 结构详解

区域注意力模块(Area Attention, A2)的设计出发点是为了解决传统注意力机制在计算复杂度和内存访问效率上的问题。传统的自注意力机制(Self-Attention)具有二次方的计算复杂度(O(n²)),尤其是在处理高分辨率图像时,计算成本非常高。此外,注意力机制的内存访问模式不如卷积神经网络高效,导致在实际应用中难以满足实时性要求。区域注意力模块通过将特征图划分为多个区域,并在每个区域内进行注意力计算,从而显著降低了计算复杂度。

Limiiiing的博客 5515

【算法】六大排序 插入排序 希尔排序 选择排序 堆排序 冒泡排序 快速排序

六大排序 插入排序 希尔排序 选择排序 堆排序 冒泡排序 快速排序

一点一点变好 3593

FPGA/IC秋招经典100题(含详解)

FPGA/IC秋招笔试面试经典100题(含答案及详解),持续更新。。。

Crazzy_M的博客 1万+

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

【七大排序算法】插入排序、希尔排序、选择排序、冒泡排序、堆排序、快速排序、归并排序

所谓排序,就是把一堆杂乱的数据,排成升序或降序(递增/增减)。假设一组数据[1,2,9,5,5,6,8],进行升序排序后,两个5的相应位置不发生改变,即称为稳定的排序,否则就是不稳定排序。数据元素全部放在内存中进行排序。即将待排序的记录存储在外存中,排序时再把数据一部分一部分地调入内存进行排序,在排序过程中需要多次进行内存和外存之间地交换。

Original0的博客 3625

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

【Python排序算法】一文掌握十大排序算法,冒泡排序、插入排序、选择排序、归并排序、计数排序、基数排序、希尔排序和堆排序

一文掌握十大排序算法,冒泡排序、插入排序、选择排序、归并排序、计数排序、基数排序、布尔排序、桶排序和堆排序

qq_35831906的博客 2542

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

排序算法:冒泡排序、插入排序、选择排序、希尔排序

相关博客: 排序算法:冒泡排序、插入排序、选择排序、希尔排序 排序算法:归并排序、快速排序 排序算法:桶排序、计数排序、基数排序 排序算法:堆排序 十大排序算法小结 一、冒泡排序: 1、算法原理: 冒泡排序只会操作相邻的两个数据。每次冒泡操作都会对相邻的两个元素进行比较,看是否满足大小关系的要求。如果不满足就让它俩互换位置。一次冒泡会让至少一个元素移动到它应该在的位置,重复n...

张维鹏的博客 6477

简单排序——选择排序、冒泡排序、插入排序

本文利用示例和图示的方法详细阐述了简单排序(选择排序、冒泡排序、插入排序)的算法原理和过程,并给出对应的代码供读者参考。

weixin_65472178的博客 7070

【数据结构】排序合集(直接插入排序、希尔排序、冒泡排序、堆排序、选择排序、快速排序、归并排序、计数排序)

完希望这篇小小文章可以为你解答疑惑!若上述文章有什么错误,欢迎各位大佬及时指出,我们共同进步!

2401_85054434的博客 1485

常见的五种排序,冒泡排序,选择排序,插入排序,并归排序,快速排序

冒泡排序 冒泡排序介绍: 冒泡排序(Bubble Sort),是一种计算机科学领域的较简单的排序算法。 它重复地跑过要排序的元素列,依次比较两个相邻的元素,如果顺序(如从大到小)那么它就会按照大到小的排序方式来。它必须要把算所有的元素重复地进行跑一遍,直到没有相邻元素需要交换,也就是说该元素列已经排序完成。 冒泡排序算法的原理如下: 1,比较相邻的元素。如果第一个比第二个大,就交换他们两个,如果不是相等的就跳过比下面的元素 ,这样依次的循环下去 直到所有的元素都比较完成才结束。 2,针对所有的元素重复以上的

无心 2623

数据结构伴内排序算法:直接排序、折半排序、希尔排序、冒泡排序、快速排序、简单选择排序、堆排序、归并排序、基数排序

希尔排序每趟并不产生有序区,在最后一趟排序结束前,所有元素并不一定归位了,但是在希尔排序每趟完成后数据越来越接近有序。的倍数的元素放在同一个组中,图 1.4是分为 d 的情况。:和直接插入排序一样,折半插入排序每趟产生的有序区并不一定是全局有序区。是采用顺序比较的方法。由于有序区的元素是有序的,可采用折半查找方法先在。中找到插入位置,再通过移动元素进行插入,这样的插入排序称为。每一个元素的比较和插入都在同组内部进行,对于元素。,重复上述的分组和排序,直到所取的增量。开始起,采用直接插入排序,直到元素。

m0_74311333的博客 2233

七大排序 ( 6000 字详解直接插入排序,希尔排序,选择排序,堆排序,冒泡排序,快速排序,归并排序)

6000字详解析,直接插入排序,希尔排序,选择排序,堆排序,冒泡排序,快速排序,归并排序

weixin_73232539的博客 2052

排序——简单排序

简单排序有三种,包括选择排序(Selection Sort)、冒泡排序(Bubble Sort)和插入排序(Insert Sort)。 选择排序每次都选择最小的关键码记录,直到完全排序。实质上就是起泡排序。选择排序第 i 趟选择的是数组中第 i 小的记录,并将这个记录放到数组的第 i 个位置。 特点:大部分时间都在比较,很少交换。 在寻找下一个较小的数时,需要检索整个未排序的序列,但只用一...

魔筝炼药师 7264

十大排序(JAVA语言)代码 冒泡排序、插入排序、希尔排序、选择排序、快速排序、归并排序、堆排序、桶排序、计数排序、基数排序

十大排序(JAVA语言)代码 冒泡排序、插入排序、希尔排序、选择排序、快速排序、归并排序、堆排序、桶排序、计数排序、基数排序

weixin_44144773的博客 1885
上一篇: 汇编写算法
下一篇: 树状数组和线段树
晓龙coding
博客等级 码龄7年 211粉丝 60原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值