参考资料《我的第一本算法书》
第2章 排序
(1)冒泡排序参考算法学习记录day1
在最糟糕的情况下,时间复杂度为O(n^2)
(2)选择排序参考算法学习记录day1
在最糟糕的情况下,时间复杂度为O(n^2)
(3)插入排序
①思路:从右侧的未排序区域内取出一个数据,然后把它插入到已排序区域内合适的位置上。最糟糕的情况下,时间复杂度为O(n^2)。
②如:随机给出一组数据要求从小到大排列,利用插入排序过程如下:从左边第二个数开始,与第一个数进行比较,若第二个数更小,则交换,否则,不变。再将第三个数取出比较,交换,以此类推,即可实现从小到大排序。
(4)堆排序
①与之前的数据结构——堆,类似参考算法学习day2,但这里是降序的。即最大的数位于最上面,取数的时候也是从最大值开始取。
②规则:父结点要大于子结点。
③整体来看,堆排序的时间复杂度为O(n㏒n),显然这要比冒泡、选择、插入排序的时间更短,但是堆相对要复杂些,难以实现。
(5)归并排序
①归并排序算法会把序列分成长度相同(或相差1)的两个子序列,当无法继续往下分时,就对子序列进行归并。归并指的是把两个排好序的子序列合并成一个有序序列,一直执行,直到全部归并。
②总的运行时间为O(n㏒n)。
③子序列在归并时,要按照从小到大进行调整。
(6)快速排序
①是一种“分治法”。将原本的问题分成两个子问题,然后再分别解决这两个问题。
②在解决子问题时会再次使用快速排序。这种在算法内部继续使用该算法的现象被称为“递归”。
③不特别强调最糟糕情况时,整体的时间复杂度为O(n㏒n)。
④即从给出的一组数中随机选择一个数作为参考,比这个参考小的就移到参考值的左边,大的就移到参考值的右边,继续在两边找参考值,比较、移动,可实现从小到大排序。