快排序算法(中)

简介: 快排序算法(中)

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

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

相关文章
|
8月前
|
搜索推荐 算法 Python
排序算法1
排序算法1
|
9月前
|
搜索推荐 算法 Shell
排序算法(C/C++)
排序算法(C/C++)
排序算法(C/C++)
|
搜索推荐 C++
89 C++ - 常用排序算法
89 C++ - 常用排序算法
46 0
|
搜索推荐 Java C++
简单介绍排序算法
简单介绍排序算法
53 0
|
搜索推荐 Java
常见的10种排序算法
常见的10种排序算法
117 0
|
搜索推荐 程序员 C语言
常见的排序算法(上)
时间如流水,今天就到初阶数据结构最后一个知识章节了,常见的排序算法!在进入这期之前,程爱打篮球的程序猿想说一句,如果有不懂的地方可以反复观看我之前的内容,再还有不懂可以直接找我,帮你安排的妥妥的!
常见的排序算法(上)
|
搜索推荐 算法
常见的排序算法(下)
上期学习完了前四个排序,这期我们来学习剩下的三个排序:
常见的排序算法(下)
|
搜索推荐 算法
排序算法详解
排序算法详解
167 0
排序算法详解
|
移动开发 人工智能 搜索推荐
排序算法总结
总结了常用的排序算法
|
搜索推荐 Java
常用排序算法总结
在计算器科学与数学中,一个排序算法(英语:Sorting algorithm)是一种能将一串数据依照特定排序方式进行排列的一种算法。本文将总结几类常用的排序算法,包括冒泡排序、选择排序、插入排序、快速排序和归并排序,分别使用Java代码实现,简要使用图例方式介绍其实现原理。
6803 0