排序-插入排序-折半插入排序及2路插入排序

statement:本篇内容只是建立在我目前经验的基础之上,必然有不完善甚至是不正确的地方,请谨慎阅读,如果能指出错误与不足之处,更是不甚感激
PS1:代码部分将使用Java语言进行展示
PS2:本节排序算法基于顺序表排序


一、原理
  • 直接插入排序:
    • 与直接插入排序不同的是,查找插入点的过程使用的是折半查找法
  • 2路插入排序:
    • 2路插入排序目的是为了减少插入后数据移动的操作
    • 原理是假设待排序队列第一个元素是整个序列中一个中间的值,然后比该样本值小的在一个数据结构内进行插入排序,比该样本值大的在一个数据结构内进行插入排序,相当于减少了一半的序列长度,自然也就减少了插入操作中移动元素的操作次数
二、时间复杂度

折半插入排序仅仅减少了查找插入点的时间,但总体时间复杂度仍然是O(n2)
2路插入排序仅仅减少了移动元素的时间,如果遇到最坏的情况(即第一个值是整个序列中最大或者最小的),2路插入排序没有任何优势,其总体时间复杂度仍然是O(n2)


参考文档:
[1] [数据结构C语言版 -- 清华大学出版社]

你可能感兴趣的:(排序-插入排序-折半插入排序及2路插入排序)