摘要: 思想 维护一种数据结构,它可以完成下面两个功能:插入数据;取出最小数据。 因为数组和链表均不能均衡这两个功能的时间复杂度。于是采用完全二叉树来实现这两种功能。 小堆,每个节点值都小于其子节点的值。 其实,就有点像排行榜的感觉,当有新的元素登上排行榜的时候,将会去除最后一名的元素,新加入的元素存储在相 阅读全文
posted @ 2020-03-19 22:55 土堆碎念 阅读(159) 评论(0) 推荐(0) 编辑
摘要: 思想 归并排序,是很有趣的算法,也是我了解的分治算法的启蒙算法。它就是将一个数组,分为两个数组,然后两个数组,继续往下分,指导每个数组子数组有两个元素,这个时候就很容易比较。然后再将其解进行合并。 可以这样想,你手上有一堆牌,然后你的手太小了,没法排序,于是你把它按照两个一组放在桌子上。然后你对一组 阅读全文
posted @ 2020-03-19 22:35 土堆碎念 阅读(157) 评论(0) 推荐(0) 编辑
摘要: 思想 希尔算法,是间隔对数组抽样,从而形成多个子数组。在这多个子数组中,保证其排序正确性。 然后对抽样间隔逐渐变小,再次保证其排序。 对于这些抽样出来的子数组,应该如何排序呢?这里用到插入排序。(选择排序因为需要每次遍历,所以对于部分排序的数组,比较浪费时间) 希尔排序的间隔选取也是有讲究的。 实现 阅读全文
posted @ 2020-03-19 22:05 土堆碎念 阅读(303) 评论(0) 推荐(0) 编辑
摘要: 思想 将数组分为排序和未排序两部分,每次从未排序部分选取一个元素,按顺序插入到已排序部分。 想象你打牌的时候,手上拿的是已排序的拍,每次抓牌的时候,都是把抓到的牌(未排序)按顺序插入到手上已排序的牌中。 插入的策略,交换相邻元素或者移动插入。每进行一个相邻交换,逆序对减一。 实现 复杂度 时间复杂度 阅读全文
posted @ 2020-03-19 21:08 土堆碎念 阅读(187) 评论(0) 推荐(0) 编辑
摘要: 思想 每次选择未排序元素中的最小值,将其放在最左边。 想象你打牌的时候,如果你手上有一堆牌,你每次找到最小的牌,然后将其出出来。手上的是未排序的牌,出出去的牌按顺序摆出来,就是已排序的。 比较耗时:第一次比较n,第二次比较n 1,以此类推 插入耗时:插入策略分为,移动选定元素前的元素,然后插入最小值 阅读全文
posted @ 2020-03-19 20:45 土堆碎念 阅读(489) 评论(0) 推荐(0) 编辑