插入类排序-折半插入排序

191 阅读1分钟

排序算法简介

排序算法中可以大致分为以下几类

  1. 插入类排序:直接插入排序、折半插入排序、希尔排序
  2. 选择类排序:简单选择排序、堆排序
  3. 交换类排序:冒泡排序、快速排序

折半插入排序

具体实现

折半插入排序是属于插入排序算法中的一种相对稳定的排序算法,主要思想是将数组分割成两部分,一部分是已排序的,另一部分待排序的。

  1. 一个长度为n的数组arr,首先是将arr[0]看成是一个排序的序列,剩下的arr[1]~arr[n-1]是无序的,用low表示已排序区的第一个元素,high表示已排序分区的最后一个元素。选择arr[1]arr[0]比较,如果arr[1]大于arr[0],则将arr[1]插入到arr[0]之前。
  2. 关于插入位置的计算则使用折半查找,当进行第i(1<i<n-1)个元素排序的时候,取low~hight的中间点m进行比较,如果小于位置m的值,再取low~m的中间位置的值进行比较,直到找到合适的位置为止。
  3. 直接最后一个元素找到合适的位置,也就是high的下标为n-1则排序完成

图示

如下

image.png

复杂度分析

折半查找只是减少了比较次数,但是元素的移动次数不变。折半插入排序平均时间复杂度为O(n^2);空间复杂度为O(1);是稳定的排序算法。