这是我参与「第三届青训营 -后端场」笔记创作活动的的第二篇笔记。
1.直接插入排序
让新插入的数字先进行比较,前面比它大的数字不断向后移动,直到找到适合这个新数字的位置后,新数字只做一次插入操作即可。
整个过程就像是已经有一些数字坐成了一排,这时一个新的数字要加入,所以这一排数字不断地向后腾出位置,当新的数字找到自己合适的位置后,就可以直接坐下了。重复此过程,直到排序结束。
2.希尔排序:
希尔排序法又称缩小增量法,其基本思想是:先将整个待排记录序列分割成为若干子序列分别进行直接插入排序,待整个序列的记录“基本有序”时,再对全体记录进行一次直接插入排序。
3.选择排序:
双重循环遍历数组,每经过一轮比较,找到最小元素的下标,将其交换至首位。
4.堆排序
基本原理也是选择排序,只是不再使用遍历的方式查找无序区间的最大数,而是通过堆来选择无需区间的最大数。
堆排序第一步是构建二叉堆,也就是把一个无序的完全二叉树调整为二叉堆,其本质是让所有的非叶子节点’'下沉"。
5.冒泡排序
在无序区间,通过相邻数的比较,将最大数冒泡到无序区间的最后,持续整个过程,直到数组整体有序。
6.快速排序
原理:
1.从待排序区间选择一个数,作为基准值(pivot)
2.遍历整个待排序区间,将比较基准值小的(可以包含相等的)放在基准值的左边,将比基准值大的(可以包含相等的)放在基准值的右边。
3.采用分治思想,对左右两个小区间按照同样的方式处理,直到小区间的长度==1,代表已经有序,或者小区间的长度 ==0,代表没有数据。
每一轮的比较和交换,需要把数组全部元素都遍历一遍,时间复杂度是O(n),假设元素个数是n,那么平均情况下需要log n轮,因此该算法的平均时间复杂度为O(n log n)。