首页 > 其他分享 >快速排序-C语言实现

快速排序-C语言实现

时间:2022-10-04 14:34:24浏览次数:44  
标签:右边 那么 元素 C语言 序列 Pivot 排序 快速

快速排序

排序思想

1. 选定Pivot中心轴
2. 将大于Pivot的数字放在Pivot的右边
3. 将小于Pivot的数字放在Pivot的左边
4. 分别对左右子序列(此时有左右2个子表),重复前三步操作。
5.注意:第4步中,如果左右子表元素 == 1,那就不用动,证明排序完了。

来个动画演示

image
【引用网络上图源:@五分钟学算法 之 快速排序】

可以看到,那个Pivot一般选取最第一个或最后一个元素,还有2个标记 l 和 r,如果发生了改变,那么它们会交替移动,直到碰在一起(产生了爱情...)

简化成3个元素:

序列: 3 2 1:
首先我们取1为Pivot,然后l 和 r 指向了 3 和 1;
然后3 和 1对比,3 > 1,那么 在1的右边,所以3 移动到 r 位:
序列: _ 2 3

然后 因为操作了,移动R 【指向2】
然后 2 和 1对比,2 > 1, 所以要放在1的右边,那么本来就在1的右边,所以不用动,序列变成:
序列: _ 2 3

因为没用动,所以r继续移动,此时 r 和 l 相遇了,所以把1放在相遇的地点:序列变成:
序列: 1 2 3

那么 1 的左边是没有元素的,所以是排序成功,那么开始排序右边(2 和 3)

一样的按照上面重复,那么。。。。。。不多说

标签:右边,那么,元素,C语言,序列,Pivot,排序,快速
From: https://www.cnblogs.com/bi-hu/p/16751427.html

相关文章

  • 【C语言】常量
    什么是常量? 常量其实就是在程序运行过程中不可以被改变的量叫做常量。常量是固定值,在程序执行期间不会改变。这些固定的值,又叫做字面量。常量可以是任何的基本数据类型,比如......
  • C语言每日一题——第七天
    第七天小明在最近的学习中了解到了函数。他决定利用函数递归的特性实现不定长文本的输出。程序具有交互式设计。首先通过命令行参数获取最大输入次数;程序运行时,打印与已......
  • 一点C语言补充知识
    1C知识点1.1传值传指针传引用传值不能改变实参的值,传指针传引用能改变实参值传指针中形参是实参的副本,不能够改变实参的值,但能够通过指针改变对应地址的内容传引用......
  • 排序的基本复杂度
      .排序算法时间复杂度稳定:如果a原本在b前面,而a=b,排序之后a仍然在b的前面;不稳定:如果a原本在b的前面,而a=b,排序之后a可能会出现在b的后面;内排序:所有排序操作都在内存中......
  • 数据结构与算法分析——C语言描述(第9章 图论算法)*
    目录9.1若干定义图的表示9.1若干定义一个图(graph)\(G=(V,E)\)由顶点(vertex)的集\(V\)和边(edge)/弧(arc)的集\(E\)组成。每一条边就是一幅点对\((v,w)\),其中\(v,......
  • 数据结构与算法分析——C语言描述(第5章 散列)
    目录5.1一般想法5.2散列函数5.3分离链接法(separatechaining)5.4开放定址法(openaddressing)本章讨论散列表(hashtable)ADT,不过它只支持二叉查找树所允许的一部分......
  • 【C语言_13】多维数组
    1.什么是多维数组?   C语言中的多维数组(multidimensionalarray)其实就是使用数组作为数组的元素。n维数组的元素是n-1维数组。例如,二维数组的每个元素都是一维数......
  • java---冒泡排序和稀疏数组的学习
    一.冒泡排序1.冒泡排序无疑是最为出名的排序算法,总共有8大排序2.冒泡代码相当简单,两层循环,两层冒泡轮数,里面依次比较3.我们看到的嵌套循环,应该立马就可以的出这个算法的......
  • fast-data-dev 快速基于容器的kafka 环境
    fast-data-dev是由lensesio团队提供的一个快速部署kafka测试环境的工具包含的组件kafkazkschemaregistrykafkaconnect以及其他不少的connector参考资料http......
  • 快速排序 Java代码展示
    我们快速排序的图解放在下面,有一些重复的动作就省略。java代码如下:/***@author:阿久*快速排序*/publicclassSnackOrder{publicstaticvoidmain(Str......