快速排序法之双路快排,男人不可以说自己快!

简介: 快速排序法之双路快排,男人不可以说自己快!

目录:

  • 一、快排方法
  • 二、代码美图

一、快排方法

4 5 2 10 6 3 9 8 1 7

首先对上面的数字进行快速排序。暂时定为数组a[10]。


一、

先在这个序列中随便找一个数作为基准数,通常选第一个数作为基准数叫他为Key吧,上面的4就是Key。(基准数的目的就是把比Key小的数放到Key的左边,把比Key大的数放到Key的右边。)

<4          4         >4


二、

| 4  | 5  | 2  | 10  | 6  | 3  | 9  | 8 | 1 | 7  |

i 作为基准数的下标,j 作为最右边数字的下标(看成一个数组)。j 向左边移动直到找到比Key(基准数)小的数(好交换到前面去)。然后i 就向右边移动直到找到比Key(基准数)大的数。(好交换到后面去)。


移动期间,j 要一直在i 的右边。i 要一直在j 的左边。(j>i),i和j遇到时就停下来。

4  | 5  | 2  | 10 | 6  | 3  | 9  | 8  | 1  | 7  |

这个时候5和1就交换。


然后继续循环①的操作

4 1 2 10 6 3 9 8 5 7
i j


4 1 2 3 6 10 9 8 5 7
i j


这个时候10和3就交换。


这个时候j继续向左边移动,到6时,6比4大要不得,还要望左边冲冲冲。到3下面时,j和i就碰到了。j就不可以移动了。然后i和j碰到对应的数字3就要和Key(基准数) 4 交换。

4 1 2 3 6 10 9 8 5 7
i,j


最后就成这样了

3 1 2 4 6 10 9 8 5 7


三,进行递归。(Key(4)就把一个数组分成了2个数组了)。

就是把3,1,2看成一个数组重复上面的操作。

把6,10,9,8,5,7看成一个数组重复上面的操作。

最后就会变成

1 2 3 4 5 6 7 8 9 10


二、代码美图 (是c语言实现的,JavaScript后续会补上)



目录
相关文章
|
搜索推荐
“掌握更多的快速排序技巧:三路划分、双路快排和非递归的深入理解”(上)
“掌握更多的快速排序技巧:三路划分、双路快排和非递归的深入理解”(上)
171 0
|
6月前
|
机器学习/深度学习 算法 搜索推荐
【算法训练-排序算法 一】【手撕排序】快速排序、堆排序、归并排序
【算法训练-排序算法 一】【手撕排序】快速排序、堆排序、归并排序
85 0
|
11月前
|
搜索推荐 算法 C语言
手撕排序算法5:快速排序非递归版本和计数排序
手撕排序算法5:快速排序非递归版本和计数排序
|
11月前
|
搜索推荐 算法
手撕排序算法2:堆排序和直接选择排序(下)
手撕排序算法2:堆排序和直接选择排序(下)
|
11月前
|
算法 搜索推荐 测试技术
手撕排序算法2:堆排序和直接选择排序(上)
手撕排序算法2:堆排序和直接选择排序(上)
|
11月前
|
机器学习/深度学习 搜索推荐 算法
【手撕排序算法1:插入排序与希尔排序】
【手撕排序算法1:插入排序与希尔排序】
|
搜索推荐 算法 索引
“掌握更多的快速排序技巧:三路划分、双路快排和非递归的深入理解”(中)
“掌握更多的快速排序技巧:三路划分、双路快排和非递归的深入理解”(中)
80 0
|
存储 搜索推荐 算法
“掌握更多的快速排序技巧:三路划分、双路快排和非递归的深入理解”(下)
“掌握更多的快速排序技巧:三路划分、双路快排和非递归的深入理解”(下)
129 0
|
搜索推荐
基数排序(常见经典排序算法)
基数排序(常见经典排序算法)
41 0
|
存储 搜索推荐 算法
leetcode排序算法总结—时间复杂度o(nlogn)-希尔/堆排/快排/归并小记
leetcode排序算法总结—时间复杂度o(nlogn)-希尔/堆排/快排/归并小记
156 0