已知数组 src 如下:

[5, 3, 7, 6, 4, 1, 0, 2, 9, 10, 8]

快速排序1

在数组 src[low, high] 中,取 src[low] 作为 关键字(key)

通过 一趟快速排序 找到 key 的位置 keypos

keypos 将数组划分为两部分: src[low, keypos - 1]src[keypos + 1, high]

src[low, keypos - 1] 中的元素都 不大于 key

src[keypos + 1, high] 中的元素都 不小于 key

一趟快速排序 步骤如下:

1、定义两个指针 leftright , 初值为 lowhigh

2、定义关键字 key , 初值为 src[low]

3、 right 向前搜索,找到第 1 个 小于 key 的元素时,将 src[left]src[right] 互换。

4、 left 向后搜索,找到第 1 个 大于 key 的元素时,将 src[left]src[right] 互换。

5、 重复 3,4,直到 left = right 时结束。


快速排序2

通过上面的步骤可以发现,我们互换的数据有 1 个是关键字,但是关键字我们已经记录在 key 中,所以不需要将关键字不停的互换。只需要将另一个值移动即可。


快速排序2(C代码)

/*********************************************************************
Function: 快速排序2
Description:将数组src[low,high]升序排序
Parameters: src: 待排序数组
low: 起始下标
high: 结束下标
Return Value: 排序完成返回0,否则-1
Author: wowpH
Date: 2019-11-12 21:57:42
Reference: 数据结构(C语言版)严蔚敏 吴伟民 清华大学出版社
From: https://www.cnblogs.com/wowpH/p/11905926.html
*********************************************************************/
int quick_sort_two(int src[], int low, int high) {
if (low < 0 || low >= high) {
return -1;// 下标不合法
}
int key = src[low];// 将第1个作为关键字
int left = low;// 左边界
int right = high;// 右边界
while (left < right) {// 两端交替向中间扫描
// 在右边查找比关键字小的数据
while (left < right && src[right] >= key) {
--right;
}
src[left] = src[right];// 将比关键字小的移动到左边
// 在左边查找比关键字大的数据
while (left < right && src[left] <= key) {
++left;
}
src[right] = src[left];// 将比关键字大的移动到右边
}
src[left] = key;// 此时left就是一趟快速排序后的关键字所在的位置
quick_sort_two(src, low, left - 1);// 对左边的数据递归排序
quick_sort_two(src, left + 1, high);// 对右边的数据递归排序
return 0;
}

快速排序视频https://v.qq.com/x/page/w3021nsi4bi.html

原文链接https://www.cnblogs.com/wowpH/p/11905926.html


- End - wowpH - pfdvnah -

快速排序(Quick Sort)C语言的更多相关文章

  1. [算法] 快速排序 Quick Sort

    快速排序(Quick Sort)使用分治法策略. 它的基本思想是:选择一个基准数,通过一趟排序将要排序的数据分割成独立的两部分:其中一部分的所有数据都比另外一部分的所有数据都要小.然后,再按此方法对这 ...

  2. 基础排序算法之快速排序(Quick Sort)

    快速排序(Quick Sort)同样是使用了分治法的思想,相比于其他的排序方法,它所用到的空间更少,因为其可以实现原地排序.同时如果随机选取中心枢(pivot),它也是一个随机算法.最重要的是,快速排 ...

  3. 快速排序Quick sort

    快速排序Quick sort 原理,通过一趟扫描将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归 ...

  4. Java中的经典算法之快速排序(Quick Sort)

    Java中的经典算法之快速排序(Quick Sort) 快速排序的思想 基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小, 然后再按此方法对 ...

  5. quicksort 快速排序 quick sort

    * Java基本版 package cn.mediamix; import java.util.LinkedList; public class QuickSort { public static v ...

  6. 排序算法 - 快速排序(Quick Sort)

    算法思想 快速排序是C.R.A.Hoare于1962年提出的一种划分交换排序.它采用了一种分治的策略,通常称其为分治法(Divide-and-ConquerMethod). (1) 分治法的基本思想  ...

  7. 快速排序算法回顾 --冒泡排序Bubble Sort和快速排序Quick Sort(Python实现)

    冒泡排序的过程是首先将第一个记录的关键字和第二个记录的关键字进行比较,若为逆序,则将两个记录交换,然后比较第二个记录和第三个记录的关键字.以此类推,直至第n-1个记录和第n个记录的关键字进行过比较为止 ...

  8. 基础算法之快速排序Quick Sort

    原理 快速排序(Quicksort)是对冒泡排序的一种改进. 从数列中挑出一个元素,称为"基准"(pivot); 排序数列,所有元素比基准值小的摆放在基准前面,所有元素比基准值大的 ...

  9. 快速排序——Quick Sort

    基本思想:(分治) 先从数列中取出一个数作为key值: 将比这个数小的数全部放在它的左边,大于或等于它的数全部放在它的右边: 对左右两个小数列重复第二步,直至各区间只有1个数. 辅助理解:挖坑填数 初 ...

  10. 排序:快速排序Quick Sort

    原理,通过一趟扫描将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序 ...

随机推荐

  1. PAT刷题 (Java语言)

    1001. A+B Format (20) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Yue Calculate ...

  2. luoguP1742 最小圆覆盖

    最小圆覆盖 首先 没错,我是个蒟蒻.luogu 流程 圆 C; for(i=1 to n) { if(P[i] 不在 C 内) { C = {P[i], 0}; for(j=1 to i-1) { i ...

  3. OpenVSwitch实验参考

    1. 使用Floodlight管理OVS桥 (1) 下载:https://codeload.github.com/floodlight/floodlight/tar.gz/v1.2 (2) tar x ...

  4. nginx 配置虚拟主机( 基于域名 )

    一.创建网站目录及文件: [root@localhost data]# tree /data /data └── wwwroot ├── www..com │   └── index.html └── ...

  5. centos7 出现“FirewallD is not running”

    原因:没有开启防火墙 #提示没有开启防火墙服务,–permanent #永久生效,没有此参数重启后失效 [root@uJZ ~]# firewall-cmd --permanent --zone=/t ...

  6. 服务在kubernetes上优雅退出

    在dashboard上,直接操作一下就可以了:将spec.replicas = 0,对应的容器组会自动销毁

  7. [Beta阶段]第三次Scrum Meeting

    Scrum Meeting博客目录 [Beta阶段]第三次Scrum Meeting 基本信息 名称 时间 地点 时长 第三次Scrum Meeting 19/05/05 大运村寝室6楼 30min ...

  8. UE运行sas配置-WIN10

    1.在UE中配置SAS运行的工具: UE--高级---用户工具--工具配置 在命令行输入"D:\soft\SASHome\SASFoundation\9.4\sas.exe" -c ...

  9. Element + Vue I18n动态import加载国际化语言包翻译文件

    需求 项目为多页应用,包含产品a.b.c.d.e,每个产品都有自己的翻译文件.一次加载所有翻译文件是极度不合理的.于是考虑动态加载. 实现 参考官方文档:延迟加载翻译 项目结构 │ ├── dist ...

  10. yapi内网部署 centos

    1.部署方案 官方说明: https://hellosean1025.github.io/yapi/devops/index.html 2.需要注意的点 (1)在centos等服务启上最好使用“命令行 ...