依次类推什么意思,依次类推和以此类推哪个正确

首页 > 实用技巧 > 作者:YD1662024-01-25 00:14:33

一 前言

算法对于程序员来说,是一个不得不去过的门槛,除了面试,工作中用到的机会却很少,偶尔用到的算法都有封装好的库调用下,就可以了,少有机会去写一个,偶尔有机会写个和算法相关的函数,可能心中也有几分忐忑,没有充分测试,总是怀疑其中隐藏什么大bug,在不该爆发的场合突然爆发,留下的一地的尴尬。

更可气的是,算法学起来的时候看起来都明白了,很简单嘛,真正动手去写的时候,却很难写出无bug的哪怕是简单的算法代码来,说起来还是没有深刻的理解,在一些细节上总是模糊不清,似是而非。所以学习算法这件事情来说,关键是要理解深刻的背后思想,不能是简单地过一遍,而是学一分就深刻理解一分,一分不理解就不要看其他的,揉碎了融入自己的思想里面,变成自己的内功,才算有收获。

二 为什么是快速排序

首先的问题是为什么要排序,除了一些我们想知道排名的场合,比如高考排名等?如果不是这些场合是不是就不要排序了,排序是计算机里面的最基本需求,排序的目的想想还是挺多的,比如我们需要知道Top K值,比如我们需要取一个城市工资的中位数,这个数值比所谓的平均值要靠谱的多,还比如有了排序,就可以做范围查询,有了排序就可以二分查找法,快速查到要搜索的数据,40亿的排序数据查找一个数,只需要最多32次,简直称得上魔法。

那为什么是快速排序那,其实也没啥特别的,就觉得快排的思想挺有意思的,二是性能也很优秀,时间复杂度为O(nlogn), 如果面试偶尔让现场手写个快排代码,也不至于没有啥准备。

虽然快排也有很多种实现,这篇是介绍的最简单的实现,没做什么优化,虽然不是最有用的,但是因为最简单,所以容易理解深刻,也容易写,也记得住。

三 快速排序3.1 快排具体过程

总体来说,快排就三步:

  1. 从数组中选择一个基准值;
  2. 以这个基准值为界,将大于这个基准值的数放在基准值的右边,将小于基准值的数放在基准值的左边;
  3. 对左右两个区间递归秩序是第一步和第二步。
3.1.1 基准分区

第一步和第三步都比较简单,关键是第二步,按照步骤说明下:

依次类推什么意思,依次类推和以此类推哪个正确(1)

说明: 1) 对上述的数组选择一个基准值,最简单的办法选择第一个元素作为基准值,赋值给tmp。 选择基准值后,第一个元素相当于空出来了。

依次类推什么意思,依次类推和以此类推哪个正确(2)

比较

说明:我们设置两个指针(其实这里面是下标),分别指向数组的头部和尾部,从尾部开始判断array[j]是不是大于基准值, 因为1<6,所以需要将array[i] = array[j] ,因为比基准值小,所以要移动到前面去,且把i指针向后移动一位,因为i指针原来值的位置已经被填了值,即是处理过了。

依次类推什么意思,依次类推和以此类推哪个正确(3)

说明: 我们判断i处的值是否小于基准值,小于则继续对后移动,一直移动到了array[i] == 9的位置,这时候条件不满足了。

依次类推什么意思,依次类推和以此类推哪个正确(4)

首页 12下一页

栏目热文

文档排行

本站推荐

Copyright © 2018 - 2021 www.yd166.com., All Rights Reserved.