快速排序(Quick Sort)C语言
已知数组 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、定义两个指针 left 和 right , 初值为 low 和 high 。
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语言的更多相关文章
- [算法] 快速排序 Quick Sort
快速排序(Quick Sort)使用分治法策略. 它的基本思想是:选择一个基准数,通过一趟排序将要排序的数据分割成独立的两部分:其中一部分的所有数据都比另外一部分的所有数据都要小.然后,再按此方法对这 ...
- 基础排序算法之快速排序(Quick Sort)
快速排序(Quick Sort)同样是使用了分治法的思想,相比于其他的排序方法,它所用到的空间更少,因为其可以实现原地排序.同时如果随机选取中心枢(pivot),它也是一个随机算法.最重要的是,快速排 ...
- 快速排序Quick sort
快速排序Quick sort 原理,通过一趟扫描将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归 ...
- Java中的经典算法之快速排序(Quick Sort)
Java中的经典算法之快速排序(Quick Sort) 快速排序的思想 基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小, 然后再按此方法对 ...
- quicksort 快速排序 quick sort
* Java基本版 package cn.mediamix; import java.util.LinkedList; public class QuickSort { public static v ...
- 排序算法 - 快速排序(Quick Sort)
算法思想 快速排序是C.R.A.Hoare于1962年提出的一种划分交换排序.它采用了一种分治的策略,通常称其为分治法(Divide-and-ConquerMethod). (1) 分治法的基本思想 ...
- 快速排序算法回顾 --冒泡排序Bubble Sort和快速排序Quick Sort(Python实现)
冒泡排序的过程是首先将第一个记录的关键字和第二个记录的关键字进行比较,若为逆序,则将两个记录交换,然后比较第二个记录和第三个记录的关键字.以此类推,直至第n-1个记录和第n个记录的关键字进行过比较为止 ...
- 基础算法之快速排序Quick Sort
原理 快速排序(Quicksort)是对冒泡排序的一种改进. 从数列中挑出一个元素,称为"基准"(pivot); 排序数列,所有元素比基准值小的摆放在基准前面,所有元素比基准值大的 ...
- 快速排序——Quick Sort
基本思想:(分治) 先从数列中取出一个数作为key值: 将比这个数小的数全部放在它的左边,大于或等于它的数全部放在它的右边: 对左右两个小数列重复第二步,直至各区间只有1个数. 辅助理解:挖坑填数 初 ...
- 排序:快速排序Quick Sort
原理,通过一趟扫描将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序 ...
随机推荐
- 压缩、解压命令——gzip、gunzip、tar、zip、bzip2
1.gzip命令与gunzip命令(压缩解压文件): (1)gzip——压缩: 利用touch命令创建一个文件,并向里面写入内容: 对创建的文件进行压缩: (2)解压缩gzip -d或gunzip: ...
- 【ARC098F】Donation
[ARC098F]Donation 题面 atcoder 题意: 给定一张\(n\)个点,\(m\)条边的无向图.这张图的每个点有两个权值 \(a_i,b_i\). 你将会从这张图中选出一个点作为起点 ...
- 【BZOJ2095】[Poi2010]Bridges
[BZOJ2095][Poi2010]Bridges 题面 darkbzoj 题解 首先可以想到二分答案,那么我们就是要求我们新图中给所有边定向是否存在欧拉回路. 而有向图存在欧拉回路的充要条件为所有 ...
- Java 使用 Jackson库 对 JavaMap 进行序列化反序列化
最近在用 java 处理一一些东西,发现 java 对对象进行序列化反序列化比起 python 来还是有些麻烦记录一下. 找了好几个库最后选择了 Jackson 感觉大家对它评价还不错. 将目标从 J ...
- ansible-playbook-批量修改主机名
修改cat /etc/ansible/hosts [test]10.27.235.108 host_name=test_host_name - hosts: test user: root gathe ...
- maven 左边空了
看一下maven: 解决方法:进入maven的配置,把maven的路径配置一下,就好了: 结果:
- 冰多多团队-第二次scrum例会
冰多多团队-第二次Scrum会议 会议基本情况 会议时间:4月8日 19:00 - 19:30 会议地点:新主楼F座2楼沙发休息处 工作情况 团队成员 已完成任务 待完成任务 zpj Service实 ...
- JPA的懒加载
JPA数据懒加载LAZY和实时加载EAGER(二) 懒加载LAZY和实时加载EAGER的概念,在各种开发语言中都有广泛应用.其目的是实现关联数据的选择性加载,懒加载是在属性被引用时,才生成查询语句 ...
- SoapUI: 从属性变量里面读取值, 把string 转换成arraylist
- Xamarin.FormsShell基础教程(6)Shell项目内容详情页面
Xamarin.FormsShell基础教程(6)Shell项目内容详情页面 轻拍内容列表页面中的任意一项内容后,进入内容详情页面,如图1.6和图1.7所示.该页面中显示了内容项的标题和具体内容.该页 ...