快排序算法(中)

简介: 快排序算法(中)

每来一个位置都有三种情况

1)第一种情况

i当前所在的数[i]<num,当前数和小于区域下一个做交换,<区域右扩,i跳下一个

2)第二种情况

[i]=num,i直接跳下一个

3)第三种情况

[i]>num

当前数i大于num

[i]当前数i和大于区域的前一个做交换

大于区域左扩

i原地不变

如图分析

i 位置上3 ,3<5 命中第一条逻辑


image.png

然后中了情况3,6大于5

i和大于区域的前一个做交换

6和0交换

大于区域向左扩

i原地不动


image.png

因为这个0是交换过来的 还没有看过它 所以原地不动

0是小于num的 中了逻辑1

所以和小于区域的下一个数做交换

0和5交换

小于区域向右扩一个位置

i跳下一个


image.png

image.png

image.png

6>5 名中第三个逻辑

和大于区域的前一个做交换

6和9换

大于区域往左扩一个位置

i原地不动

image.png

9>5

名中第三个逻辑

和大于区域的前一个做交换

9和9自己换

大于区域往左扩一个位置

i原地不动


image.png

当大于区域和i撞上的时候 交换停止

此时已经做到了 左边都是小于5的,中间都是等于5的,右边都是大于5的


image.png

i根据自己现在来到的数

如果是等于num的 就在等于区域直接扩充

然后跳下一个

image.png

相当于小于区域推着等于区域往前走

如果i是大于区域的

image.png

和大于区域的下一个交换并左扩

要么i往右走压缩待定区域

让小于区域推着等于区域奔向大于区域

要么i位置直接发货到大于区域

让大于区域往左扩 压缩待定位置

当小于区域推着等于区域和大于区域撞上的时候 就结束了

快排1.0版本

image.png

在整个数组中 拿最后一个数做划分值

最后一个数认为是num

让最后一个位置前面的这一段 小于等于num的放到左边

大于num的放在右边

image.png

这个数和大于区域的第一个数做交换

就可以做到小于等于区域被扩充了 而且最后一个数一定是num

然后剩下的都是大于区域的

让num的左侧和右侧重复这个行为

比如

image.png

相关文章
|
5月前
|
搜索推荐 算法
排序算法总结
排序算法总结
36 11
|
搜索推荐 算法 Shell
排序算法
排序算法
41 1
|
搜索推荐 C++
89 C++ - 常用排序算法
89 C++ - 常用排序算法
40 0
|
搜索推荐 算法
14 排序算法
14 排序算法
31 0
|
搜索推荐 Java C++
简单介绍排序算法
简单介绍排序算法
40 0
|
算法 搜索推荐 Java
TimSort——最快的排序算法
TimSort 算法是 Tim Peters 于 2001 年为 Python 语言创建的。该算法建立在插入排序和归并排序的基础之上,兼具插入排序和归并排序的优点。TimSort 的平均时间复杂度为 O(nlog(n)) ,最好情况 O(n) ,最差情况 O(nlog(n)) 。空间复杂度 O(n) ,是一个稳定的排序算法。
1582 0
TimSort——最快的排序算法
|
算法 搜索推荐 Java
常见排序算法详解(1)
前言 排序是我们在日常生活和工作中常见的一种操作。在计算机科学中,排序算法就是将一串或一组数据按照特定的顺序进行排列的算法。这些顺序可能是数字的升序或降序,也可能是字母或字词的字母顺序等。我们将探讨几种不同的排序算法,包括他们的原理、优缺点以及代码实现。
130 0
|
算法 搜索推荐
排序算法的简单认识
在进行很多便捷算法之前总是要实现对象的有序化,而这就将使用到排序相关的算法,即使目前诸多高级语言已然完成对于排序算法的封装,用户只需导入对应库文件即可调用排序算法完成排序,无需手写排序算法,但具体的排序算法的选择就必须对于排序算法有所认识。本文就将介绍两个简单的排序算法:选择排序与冒泡排序。 选择排序 为什么称为选择排序? 该算法每次都是对于未排序的关键字进行比较,选择出最小或最大的关键字,再对其交换位置,实现一次排序,需进行多次比较。 选择排序法是一种不稳定的排序算法。它的工作原理是每一次从待排序的数据元
75 0
|
搜索推荐 算法
|
算法 搜索推荐 C++