c语言快排过程,快速排序(快排)C语言实现
快速排序
快速排序由C. A. R. Hoare在1962年提出。它的基本思想是:经过一趟排序将要排序的数据分割成独立的两部分,其中一部分的全部数据都比另一部分的全部数据都要小,而后再按此方法对这两部分数据分别进行快速排序,整个排序过程能够递归进行,以此达到整个数据变成有序序列。是对冒牌排序的一种改进web
快速排序的平均时间复杂度为O(nlogn),是一种不稳定的排序算法,排序效率最高算法
快排思路(从小到大):
首先有 N 个待排序的数据,a[N] ,选择第一个数据做为哨兵(key,一般都是第一个),经过一趟排序将区间内比哨兵(key)大的数所有放到哨兵(key)后面,将区间内比哨兵(key)小的数所有放到哨兵(key)前面,这样就能够将原区间划分为两个区间,即哨兵(key)前、后的两个区间,而后对这两个区间分别进行上面的步骤,即从新选定哨兵(key),再划分区间,直到区间的数据只有一个为止
一、定义两个变量 i 和 j ,i = 0,j=N-1
二、选定哨兵(key),key=a[i]
三、从后面开始往前进行搜索,即从 j 的位置开始,进行 --j; 找到一个小于key的值a[j] 或者是 i== j 中止,将 j 位置上的数据赋值给 i 位置上,即a[i] = a[j]
四、再从前面开始日后进行搜索,即从 i 的位置开始,进行 ++i;找到一个大于key的值a[i] 或者是 i==j 中止,将 i 位置上的数据赋值给 j 位置上,即a[j]=a[i]
五、重复三、4步骤,直到区间数据只有一个为止(一个数据已是排好序的)svg
原序列:code
下标
0
1
2
3
4
5
6
7
8
9
数据
5
3
8
6
0
9
1
7
4
2
建立变量 i 、 j 、 key,i = 0(指向第一个数据),j=9(指向最后一个数据),key=a[i],即a[0]当作哨兵,而后从后往前开始寻找比key小的数,移动到key的前面,不断递减j的值,找到一个比5小的数是9号位的数据2,此时i=0,j=9,而后执行a[i]=a[j]xml
0
1
2
3
4
5
6
7
8
9
2
3
8
6
0
9
1
7
4
2
接着进行第二次的寻找,从前日后寻找比key大的数,移动到key的后面,不断递增i的值,找打一个比5大的数是2号位的数据8,此时i=2;j=9;而后执行a[j]=a[i]blog
0
1
2
3
4
5
6
7
8
9
2
3
8
6
0
9
1
7
4
8
第三次寻找从后往前寻找比key小的数,移动到key的前面,不断递减j的值,找到一个比5小的数是8号位的数据4,此时i=2;j=8;执行a[i]=a[j]排序
0
1
2
3
4
5
6
7
8
9
2
3
4
6
0
9
1
7
4
8
第四次寻找从前日后寻找比key大的数,移动到key的后面,不断递增i的值,找到一个比5大的数是3号位置的数6,此时i=3;j=8;执行a[j]=a[i]递归
0
1
2
3
4
5
6
7
8
9
2
3
4
6
0
9
1
7
6
8
依次类推,不断进行上面的循环比较,最后将key放到中间的位置,这里是5号位,5号位前面的都比5小,后面的数都比5要打,通过一趟比较以后获得的结果为图片
0
1
2
3
4
5
6
7
8
9
2
3
4
1
0
5
9
7
6
8
注意:一趟的比较结果是不会得出最终的结果,获得的结果是把比key大的和比key小的分到key的两边而已,须要再次对下标5两边的区间当作两个新的序列,分别进行上述操做,此过程是一个递归的过程,直到区间的数据只有一个为止(不能进行比较了,由于一个数已是有序的),这样通过必定的趟数以后,才能获得最终的结果it
C语言实现
#include
#define N 10
/*快速排序*/
void Qsort(int *a,int low ,int high)
{
if(low>=high)
return ;
printf("start:%d end:%d\n",low,high) ;
int first = low ;
int last = high ;
int key = a[low] ;
while(first
{
while(first=key)
--last ;
a[first] = a[last] ;
while(first
++first ;
a[last] = a[first] ;
}
a[first] = key ;
Qsort(a,low,first-1) ;
Qsort(a,first+1,high) ;
}
int main(void)
{
int a[N] = {5,3,8,6,0,9,1,7,4,2} ;
int i;
printf("原来序列:") ;
for(i=0;i
printf("%d ",a[i]) ;
printf("\n\n") ;
/*快速排序*/
printf("每次排序的区间为:\n") ;
Qsort(a,0,N-1) ;
printf("\n排后序列:") ;
for(i=0;i
printf("%d ",a[i]) ;
printf("\n") ;
return 0 ;
}
c语言快排过程,快速排序(快排)C语言实现相关推荐
- c语言在面向过程有啥特点,C语言是什么
C语言是一种高级编程语言,程序员大多使用C语言用于底层的开发,并且适合开发固态等应用程序,C语言主要是提供一种简单的编译,存储器,并且是不需要任何环境就能运行的语言. 本文操作环境:Windows7系 ...
- r语言 rgl 强制过程中_一个R语言中操纵矢量空间数据的标准化工具—sf
注: 本文是R语言sf包的核心开发者和维护者--来自德国明斯特大学的地理信息学教授:Edzer Pebesma 的一篇关于sf包的简介,发表于2018年7月的R语言期刊,主要讲述了sf的定位.功能. ...
- C语言的编译过程常见的错误和警告
C语言的编译过程: 一. C语言编译过程 C语言的编译过程可分为四个阶段: 1.预处理(Preprocessing) 对源程序中的伪指令(即以#开头的指令)和特殊符号进行处理的过程. 伪指令包括:1) ...
- 分治法:快速排序,3种划分方式,随机化快排,快排快,还是归并排序快?
快速排序不同于之前了解的分治,他是通过一系列操作划分得到子问题,不同之前的划分子问题很简单,划分子问题的过程也是解决问题的过程 我们通常划分子问题尽量保持均衡,而快排缺无法保持均衡 快排第一种划分子问 ...
- 算法——java快排(快速排序)
手写java快排(快速排序)代码--双边循环法,本人亲测哈哈!! package com.abc.backend.algo;import java.util.Arrays;/*** 快排(双边循环法) ...
- 快排和归并排序--快排处理第k大元素
快排和归并排序 归并排序 归并排序性能分析 归并排序是稳定的排序算法吗 归并排序时间复杂度 空间复杂度 快排 归并排序对比快排 快排处理第k大元素 冒泡.插入.排序这些排序时间复杂度都是 O(n2), ...
- 数学之美番外篇:快排为什么那样快
目录 0. 前言 1. 猜数字 2. 称球 3. 排序 3.1 为什么堆排比快排慢 3.2 为什么快排其实也不是那么快 3.3 基排又为什么那么快呢 4. 信息论!信息论? 5. 小结 0. 前言 知 ...
- 快排为什么那样快(转)
快排为什么那样快(转) 快排为什么那样快(转) - Bit By Bit 快排为什么那样快(转) 文章作者:Titi 0 条评论 From http://mindhacks.cn/2008/06 ...
- 快排为什么那样快-发现数学之美
1. 猜数字 我们先来玩一个猜数字游戏:我心里默念一个1~64之间的数,你来猜(你只能问答案是"是"或"否"的问题).为了保证不论在什么情况下都能以尽量少的次数 ...
最新文章
- 多线程并发的解决方案 volatile synchronized notify notifyAll wait关键字分析
- 2021年春季学期-信号与系统-第二次作业参考答案-第三小题
- Tensorflow官方文档中文版——第一章
- OpenCASCADE:形状愈合之形状加工
- 【测试点分析】1072 开学寄语 (20分)_42行代码AC
- python做请求转发_RequestDispatcher实现请求转发
- 鬼使神差的给宝宝办了大米的卡
- Win10应用商店被卸载的恢复方法
- JAVA学习导图、思维导图
- HTML5地理位置定位API接口开发
- 大厂必考深度学习算法面试题
- git切换分支、push或pull指定分支
- VMware虚拟化方案之备份ESXi虚拟机
- win2003 启用了Internet Explorer增强的安全配置
- redis 两台服务器组集群
- Saas发展史常用架构
- mac更改管理员密码
- 高性能网站 首屏渲染速度
- 手机看小说时如何设置上下或左右翻页模式
- 仅拍125个视频就成为千万级网红? Python告诉你:李子柒的网红路
热门文章
- go语言黑帽子学习3
- springboot+特色农产品电商平台 毕业设计-附源码211515
- 【文本标注】文本标注工具brat的使用
- 华为5500网络限流配置_华为USG防火墙综合解决方案
- 【Pygame实战】末世来临,真正从零开始的残酷生存游戏,你能活多久?
- AS使用Viewbinding出现Could not find method buildFeatures() for arguments报错
- uniapp 使用支付宝扫码插件
- lan的以太网标准_并非所有以太网电缆都是平等的:通过升级,您可以获得更快的LAN速度...
- error ‘defineProps‘ is not defined no-undef
- 四种最常见路由协议 RIP、IGRP、OSPF和EIGRP。