排序算法简介
排序算法中可以大致分为以下几类
- 插入类排序:直接插入排序、折半插入排序、希尔排序
- 选择类排序:简单选择排序、堆排序
- 交换类排序:冒泡排序、快速排序
折半插入排序
具体实现
折半插入排序是属于插入排序算法中的一种相对稳定的排序算法,主要思想是将数组分割成两部分,一部分是已排序的,另一部分待排序的。
- 一个长度为n的数组arr,首先是将
arr[0]
看成是一个排序的序列,剩下的arr[1]~arr[n-1]
是无序的,用low
表示已排序区的第一个元素,high
表示已排序分区的最后一个元素。选择arr[1]
跟arr[0]
比较,如果arr[1]
大于arr[0]
,则将arr[1]
插入到arr[0]
之前。 - 关于插入位置的计算则使用折半查找,当进行第i(1<i<n-1)个元素排序的时候,取
low
~hight
的中间点m
进行比较,如果小于位置m
的值,再取low~m
的中间位置的值进行比较,直到找到合适的位置为止。 - 直接最后一个元素找到合适的位置,也就是
high
的下标为n-1
则排序完成
图示
如下
复杂度分析
折半查找只是减少了比较次数,但是元素的移动次数不变。折半插入排序平均时间复杂度为O(n^2);空间复杂度为O(1);是稳定的排序算法。