快速排序算法

  • 一、序言
  • 二、快速排序基本思想
  • 三、具体步骤
  • 四、具体代码

一、序言

快速排序是一种高效且使用广泛的排序算法,在很多语言的标准库中自带的排序都是快速排序。所以我们也有必要了解快排的原理以及实现方法。

二、快速排序基本思想

算法思想:快速排序实现的重点在于数组的拆分。通常我们将数组的第一个元素作为比较元素,然后将数组中小于比较元素的数放到左边,将大于比较元素的放在右边。
这样我们就将数组拆分成了两部分:小于比较元素的数组和大于比较元素的数组。我们再对这两个数组进行相同的拆分。直到拆分到不能再拆分,数组自然就以升序排列了。

三、具体步骤

①、定义两个变量 i 和 j分别指向待排序数组的首尾,定义一个临时变量temp存储比较元素的值(一般取第一个元素,一次排序目的就是令temp在序列中寻找一个合适的位置,使temp左侧元素都不超过temp,右侧的元素都大于temp)
②、令 j 不断向左移动,直到找到某一元素A[ j ] <= 该元素,然后将它挪到A[ i ]所在位置(A[ i ]处的元素已经保存在了temp中),j 进入等待状态, 进入③
③、令 i 不断向右移动, 直到某一元素值A[ i ] > 该元素, 将A[ i ]挪到A[ j ]所在位置(原来的元素已经挪到了该去的地方), i 进入等待状态, 进入②
④、②③不断循环,当i 和 j 指向同一个位置时该位置就是temp应该插入的位置,直接插入就行了(原来的元素已经挪到了该去的地方)

现在temp左侧的元素一定不大于它,temp右侧的元素一定大于它,等于说当整个数组全部排好序后temp的位置就在这里

下面进行左边[ 0, temp-1 ] 和 右边[temp+1, n-1]位置元素的排序(传参就是方括号里面的),方法和上面的相同,然后再不断的切割不断地排序,直到某一区间仅有一个元素为止,这就要用到递归了。

四、具体代码

#include<stdio.h>
#include<stdlib.h>#define MAX 10void display(int arr[],int num){//遍历数组int i;for(i = 0;i < num;i++){printf("%-5d",arr[i]);}printf("\n");return;
}void quitarray(int arr[],int low,int high){//快速排序if(low < high){int i = low;int j = high;int temp = arr[i];//存放比较值while(i < j){while(i < j && arr[j] >= temp){j--;}if(i < j){arr[i] = arr[j];i++;}while(i < j && arr[i] <= temp){i++;}if(i < j){arr[j] = arr[i];j--;}arr[i] = temp;}quitarray(arr,low,j-1);//左边quitarray(arr,i+1,high);//右边}
}int main(){int arr[MAX] = {13,76,43,9,5,98,100,99,32,14};int num = MAX;display(arr,num);//没有排序之前数组quitarray(arr,0,num - 1);//快速排序display(arr,num);//排序完之后的数组return 0;
}

快速排序算法讲解及代码(详细)相关推荐

  1. 快速排序算法(图解+代码)

    快速排序 快速排序是基于交换类的排序.快速排序是当前公认的执行效率最高的排序算法,它的基本思想就是分治思想,使用递归来实现. 下面我们来演示一下快排的大致排序过程. 首先我们给定一个无序数组,将无序数 ...

  2. 模块度(Modularity)与Fast Newman算法讲解与代码实现

    原创文章,转载请注明,谢谢~ 一.背景介绍   Modularity(模块度), 这个概念是2003年一个叫Newman的人提出的.这个人先后发表了很多关于社区划分的论文,包括2002年发表的著名的G ...

  3. 模块度计算python代码_转:模块度(Modularity)与Fast Newman算法讲解与代码实现

    一.背景介绍 Modularity(模块度), 这个概念是2003年一个叫Newman的人提出的.这个人先后发表了很多关于社区划分的论文,包括2002年发表的著名的Girvan-Newman(G-N) ...

  4. 用Python实现快速排序和冒泡排序,代码+详细解析

    1.冒泡排序 冒泡排序:每一次相邻的两个数做比较,大的往后移动一位,每次循环都会把最大的值(升序)或最小的值(降序)放在末端 . # a = [7, 8, 5, 45, 91, 1, -10, 0] ...

  5. oracle快速排序法,经典算法系列之快速排序算法

    快速排序(Quicksort)是对冒泡排序的一种改进.由C. A. R. Hoare在1962年提出.在平均状况下,排序 n 个项目要Ο(n log n)次比较.在最坏状况下则需要Ο(n2)次比较,但 ...

  6. 排序算法:快速排序算法实现及分析(递归形式和非递归形式)

    快速排序算法介绍 从名字上就可以看出快速排序算法很嚣张,直接以快速命名.确实快速排序 的确很快速,被列为20世纪十大算法之一.程序员难道不应该掌握么.快速排序(Quick Sort)的基本思想是:通过 ...

  7. Python与Matlab算法学习一文通(快速排序算法)(更新中)

    想利用一些空余时间学一学python与matlab,与同学建立不知道能坚持多久的学习联盟,每周一部分题目,利用一周时间完成原理文档与程序编写.由于主要研究方向为其他方向,因此只会利用很少的空闲时间来学 ...

  8. lamport面包店算法详细讲解及代码实现

    lamport面包店算法详细讲解及代码实现 1 算法详解 1.1 一个较为直观的解释 1.2 Lamport算法的时间戳原理 1.3 Lamport算法的5个原则 1.4 一个小栗子 2 算法实现 3 ...

  9. 详细讲解php快速排序,PHP快速排序算法使用步骤详解

    这次给大家带来PHP快速排序算法使用步骤详解,PHP快速排序算法的注意事项有哪些,下面就是实战案例,一起来看一下. 基本思想: 快速排序(Quicksort)是对冒泡排序的一种改进.他的基本思想是:通 ...

最新文章

  1. 使用 Gitlab 进行嵌入式软件开发技巧
  2. 网络请求可以返回数据的网站_实例解析|Python加解密VIP网站反爬请求头实现数据爬取...
  3. linux的vi命令详解,Linux上Vi命令详解
  4. PHP 数组的内部实现
  5. java 拷贝文件夹的实现
  6. nodejs安装_nodejs调试全局安装的cli脚本
  7. java多线程的写法三个线程_Java多线程的几种写法
  8. 又上热搜!鸿星尔克悄悄给山西捐赠2000万物资!这些大厂也出手了...
  9. Spring MVC处理用户请求的完整流程
  10. WTL-编译出错01--CVTRES : fatal error CVT1100: 资源重复。类型: MANIFEST,名称: 1,语言: 0x0409
  11. 从零开始——安装插件和各种专业术语
  12. oracle 导入时出现两个,Oracle的导入及两个错误
  13. 多媒体计算机的扫描仪属于感觉媒体吗,多媒体计算机中的扫描仪属于感觉媒体...
  14. kitti数据集calib.txt文件
  15. Ubuntu18.04安装搜狗输入法使用时不能输入中文
  16. 苹果mp3软件_学文案一代神器iPod的16年兴衰——苹果广告40年
  17. o.redisson.client.handler.CommandsQueue : Exception occured.
  18. kepware rest服务器_KEPServerEX
  19. 堪称神级的开源笔记应用!
  20. 使用 JABX 将 Map<String,String> 序列化成 <key>value</key>形式的字符串

热门文章

  1. 黑客网站攻击的主要手段
  2. 微信小程序之提示框弹框
  3. 2023年大火的 7 款知识管理工具!
  4. 【转载】Node.js 教程(菜鸟教程系列)
  5. 实际上我没有选择的余地
  6. ESP-01S刷固件
  7. 安卓APP获取ROOT权限
  8. rails作者DHH谈及REST
  9. 调整echarts中图与legend的距离
  10. Openwrt安装软件的方法