快排(基础详解入门)

前言

快排是一种高效的排序方法,虽然思维容易理解,但入门稍有难度。为了方便以后理解,于是写下这篇文章。若文章含有错误,欢迎各位纠正 。 


一、快排的主要内容

1.快排函数(递归)模板

void QuickSort(int a[], int low, int high) {
    int i = low,j = high;
    if(i >= j)  return;
    int temp = a[low];
    while(i != j) {
    while(a[j] >= temp && i < j) j--;
	while(a[i] <= temp && i < j) i++; 
	if(i < j) swap(a[i], a[j]);
    }
    swap(a[low], a[i]);
    QuickSort(a, low, i - 1);
    QuickSort(a, i + 1, high);
}

2.快排中的“key"

key其实就是相当于隔板(模板中则为temp),用于分开两个部分,key往左的部分小于key,反之往右的部分大于key

二、快排解析

1.过程动态分析

5d29d554d43e449eb8df4dae4756414a.gif

1.首先挑出快排的key (一般以数组第一个数为key),图中最上方为key。

2.第一轮:从low(最低处)往高处开始,找出第一个大于key的数,假设这个数为a;从high(最高处)往低处开始,找出第一个小于key的数,假设为b。交换a,b的位置。

 255794ad76e54a1f918a9c2dbd501486.gif

第二轮:同样从low和high开始遍历,找出a,b并交换位置

     5532b0829b6e48b5a082b6140c38f7f2.gif  

1.第三轮:当从high遍历到达low之前遍历的地方时,也就是完成交接,则以key为基准的分选结束,然后交换key和交接处的位置,结束第一次的快排。

                                                    附上第一次快排代码运行结果

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAa2tf6Zi_55m9,size_20,color_FFFFFF,t_70,g_se,x_16

 快排整个过程的动态变化

 200e717e545f44b7bd01e9429e4a862c.gif

2.快排模板分析

 if(i >= j)  return;     说明仅含一个数字,无需快排

int temp = a[low];   选出key

while(i != j) {        当左右遍历交接时结束   

……                                                             

}                                                                 

while(a[j] >= temp && i < j)   j--;   从low往高处遍历
while(a[i] <= temp && i < j)  i++;  从high往低处遍历

if(i < j)   swap(a[i], a[j]);       交换a,b(a,b为以上的值)位置

swap(a[low], a[i]);     交换key与交接处位置

 QuickSort(a, low, i - 1); 对key左边再次快排
 QuickSort(a, i + 1, high);  对key右边再次快排

  • 11
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

kk_阿白

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值