
排序算法
排序算法学习
云会宾
云无心
展开
-
快速排序理解
分成好多部分,用递归。圈复杂度最优是nlogn:理想中每次对半分,因为每次分2个部分递归1次是2分,2次是2^2等,所以分几次是以2为底数的logn,一共n次循环所以nlogn。至于为啥以2为底的对数却是logn把2去掉了,这个因为是对数换底公式任何底数都可以有关系——比如log(2)n=log(2)3log(3)n=Clog(3)n,以大O法判定log(2)n==log(3)n,同理所有底数都相等,所以就是logn了——不懂的话请看高中数学对数章节的对数换底公式。最坏是n^2。因为每次分都是2部分一原创 2021-09-17 17:37:54 · 160 阅读 · 0 评论 -
插入排序算法理解
总体思想:(1)分为两个区域——无序与有序。(2)利用比较与交换(移动)操作从无序区域加入到有序区域。插入排序插入排序是在有序的左边进:在有序数据中比较,将无序的数据依次和有序的数据进行比较,按有序(正序、倒序)来从后到前或者从前到后依次比较,比较到插入的位置为止。选择排序:在无序数据中比较,比较出的数据放到有序中。其实这两种排序思想(思路)一致,只不过在哪比较。插入排序是在有序的左边进行比较的圈复杂度最优是n,最坏是n^2稳定性:稳定的...原创 2021-09-14 14:50:52 · 157 阅读 · 0 评论 -
冒泡排序理解
如海浪一般,把大的往后推,直到碰到比它更大的,然后再把这个更大的往后推,直到碰到更更大的,这样一轮就把大最大的推到最后了,然后循环这样第二大第三大这样子就完成了有序。跟马牌一样,大的或者小的往后排,第一次老大或者看小肯定排到后面或者前面了,第二次老大或者老小就排到后面倒数第二或者正数第二了,这样不断循环,直到n-1次。圈复杂度为O(n^2)此方法很稳定。...原创 2021-09-14 14:47:49 · 111 阅读 · 0 评论 -
归并排序理解
稳定性:稳定的原地排序:是的——不会消耗额外的空间(只是消耗常数额外一点固定空间)时间复杂度:O(nlogn)空间复杂度:O(n)**归并排序思想:**分而治之。有道是分久必合合久必分。这个归并排序也是先分再合的东西。流程:它像二叉树一样向下生长——先绽放左侧子树,直到终止条件——之所以说“绽放”,因为它的流程很像鲜花绽放,但它这绽放是每次砍半后,左半部作为子树接着再砍半,直到终止条件——1个元素——达到了左侧叶子节点,这样就停止绽放。以上是“分”,接着便开始了“合”,此时开始了收缩与枯萎——从原创 2021-09-17 10:51:15 · 273 阅读 · 0 评论 -
选择排序算法理解
轮流当代王、擂主,打擂决出各个位置的归属。根据座号依次PK出各座位匹配的人。座位固定,挨个座位进行选择出来各个座位的适合的人。有一群人无序地坐在一排有序的座位上,想要这群人坐上对的位置。选择排序是假定这些座位是有序的,但是座位上的人可能是不匹配的,那么先定0号座位的归属,那么开始选择了:0号座位上的人和其他座位上的人都依次比一下,谁比0座位上的小就来做,这样筛选出最小——你比我小你来坐,还有人比你更小,换更小的人来坐。这样一轮后坐在0号座位上的人就是它真正的主人了。接着也是这样找1号的主人,如此循环n-1原创 2021-09-14 14:48:47 · 135 阅读 · 0 评论 -
递归要素及太深导致堆栈溢出怎么办?
递归太深导致堆栈溢出怎么办?2个手段:1.限制递归深度,设置一个阈值,超过就返回。2.在堆上模拟函数调用栈,自己实现压栈出栈,这样就解除了栈溢出的根源问题。原创 2021-09-20 09:45:19 · 1998 阅读 · 0 评论 -
归并排序与快速排序比较
归并排序就是:先分再合的。详细就是分分分,分到极点,然后再合合合。分就是分割区域,合就是排序。快排就是:先合再分的。详细就是,粗略合一波,然后分,在粗略合一波,再分,这样交替执行知道极点,然后返回就完事了。由此可见,归并排序和快排其实操作是有一点相反的,一个先分再合,一个是各分交替执行——先合再分、再合再分。它们不是严格相反的,因为快排不是先合后面就一直分分分,不是这样的。...原创 2021-09-24 12:29:47 · 1002 阅读 · 0 评论 -
大O复杂度表示法
大 O 表示法中,可以省略低阶、系数和常数,比如O(nlogn) 在没有省略低阶、系数、常数之前可能是 O(knlogn + c),而且 k 和 c 有可能还是一个比较大的数。原创 2021-09-20 09:47:22 · 153 阅读 · 0 评论