快排序算法(中)

简介: 快排序算法(中)

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

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

相关文章
|
6月前
|
搜索推荐
简单的排序算法
简单的排序算法
45 1
|
2月前
|
搜索推荐 索引
排序算法详解
本文介绍了多种排序算法,包括插入排序(如直接插入排序和希尔排序)、选择排序(如直接选择排序和堆排序)、交换排序(如冒泡排序和快速排序)以及归并排序和计数排序。插入排序通过构建有序序列逐步插入元素;选择排序通过不断选择最小元素放置于序列起始;交换排序通过元素间的交换达到排序目的;归并排序采用分治法将序列分解再合并;计数排序则通过统计元素出现次数来排序。文章详细阐述了各种排序算法的原理及其实现方法。
37 6
排序算法详解
|
6月前
|
搜索推荐 算法
常见的排序算法(1)
常见的排序算法(1)
80 3
|
6月前
|
搜索推荐
常见的几种排序算法
常见的几种排序算法
53 1
|
11月前
|
搜索推荐 算法 Shell
排序算法
排序算法
39 1
|
6月前
|
搜索推荐 算法
常见排序算法实现(二)
常见排序算法实现(二)
51 0
|
搜索推荐 算法
14 排序算法
14 排序算法
31 0
|
搜索推荐 算法 测试技术
|
搜索推荐 Java
常见的10种排序算法
常见的10种排序算法
108 0
|
搜索推荐
带你了解排序算法
带你了解排序算法
136 0
带你了解排序算法