用x存储要插入的元素,从要插入元素的前一个元素开始向前比较,找到比它小的就插入。
每一次循环都要比较两次,还要保证被插入位置下标>0
使用带哨兵的顺序查找法
哨兵位置放在数组下标为0的位置上,剩下的和直接插入一样,也是一个一个从后往前比较
算法实现
折半插入排序
在哨兵插入的基础上使用二分查找的方式插入最小下表为1
希尔排序:多间隔跳跃排序,一次移动位置较大,跳跃式的接近排序后的位置
增量序必须时递减的 最后一个必须为1
是一种不稳定的排序
先间隔5个数字进行排序 再间隔三个数字进行排序,再间隔一个数字进行排序
交换排序
冒泡排序 快速排序
快速排序不稳定
选择排序
简单选择排序 堆排
基本思想:在待排序的数据中选出最大(小)的放在其最终位置上
再使用打擂台的方式找到最小的,和第一个位置/第二个位置的元素进行交换
堆排序
小根堆 大根堆
小根堆:所有的根都比左右孩子小
大根堆:所有的根都比左右孩子大
大根堆的堆顶就是最大值,小根堆的堆顶就是最小值
将堆顶输出后,把堆中的最后一个元素上调至堆顶,再和左右子树进行调整,直至调整至叶子节点。
建立堆:从一个无需序列建立起一个大(小)根堆
归并排序
将两个或者两个以上的有序子序列,归并成为一个有序子序列
插入:
直接插入排序:相当于抓牌游戏,使用哨兵放在第一个位置上,从后往前一个一个对比
:使用二分法的直接插入
希尔排序:跳跃式排序 5,3,1
交换
冒泡排序:
快速排序:选择第一个元素为标记点,小的放在它前面,大的放在他后面,将序列分为了两个子表,再对两个子表进行上面操作。
选择
选择排序:从一个序列中用打擂台方式取出最小的一个放在第一个位置上,取出第二小放在第二个位置上
堆排:将无序的数据堆化,排成小根堆/大根堆,取出顶堆元素,进行堆调整,再取堆顶元素
归并:将两个或者多个有序序列归并为一个有序序列