美文网首页
说说算法那些事-插入排序

说说算法那些事-插入排序

作者: 奔跑的时间 | 来源:发表于2017-11-03 14:19 被阅读0次

插入排序的基本操作就是将一个数据插入到已经排好序的有序数据中,从而得到一个新的、个数加一的有序数据。插入排序方法分直接插入排序和折半插入排序两种。查看完整代码

一、直接插入排序

1、直接插入排序是一种简单的插入排序法,其基本思想是:把待排序的元素按其元素值的大小逐个插入到一个已经排好序的有序序列中,直到所有的记录插入完为止,得到一个新的有序序列

2、算法步骤:

(1)、从待排序的第二个元素开始,向下扫描列表,比较这个目标值target与arr[i-1]、arr[i-2]的大小,依次类推。如果target的值小于或等于每一个元素值,那么每个元素都会向右滑动一个位置,一旦确定了正确位置j,目标值target(即原始的arr[i])就会被复制到这个位置。

3、实例图解:


4、算法分析:

时间复杂度:当元素初始化就是正序排列的,时间复杂度为O(N),当元素初始化是逆序的,时间复杂度为O(N^2),所以平均时间复杂度为O(N^2)

空间复杂度:在直接插入排序中只使用了i,j,temp这3个辅助元素,与问题规模无关,所以空间复杂度为O(1).

稳定性:在整个排序结束后,即使有相同元素它们的相对位置也没有发生变化,所以直接插入排序是一种稳定排序。

二、折半插入排序

1、折半插入排序的基本思想与直接插入排序一样,在插入第i(i≥1)个元素时,前面i−1个元素已经排好序。区别在于寻找插入位置的方法不同,折半插入排序是采用折半查找法来寻找插入位置的。

2、算法步骤:

(1)计算 0 ~ i-1 的中间点,用 temp临时变量元素与中间值进行比较,如果temp元素大,说明要插入的这个元素应该在中间值和temp对应的i之间,反之,就是在i到中间值的位置,这样很简单的完成了折半;

(2)在相应的半个范围里面找插入的位置时,不断的用(1)步骤缩小范围,不停的折半,从而快速的确定出第 i 个元素要插在什么地方;

(3)确定位置之后,将整个序列后移,并将元素插入到相应位置。

3、算法分析:

时间复杂度:折半插入排序适合记录数较多的场景,与直接插入排序相比,折半插入排序在寻找插入位置上面所花的时间大大减少,但是折半插入排序在记录移动次数方面和直接插入排序是一样的,所以其时间复杂度为O(N^2)。其次,折半插入排序的记录比较次数与初始序列无关。因为每趟排序折半寻找插入位置时,折半次数是一定的,折半一次就要比较一次,所以比较次数也是一定的。

空间复杂度:同直接插入排序一样,为O(1)。

稳定性:折半插入排序是一种稳定的排序算法。

相关文章

  • 说说算法那些事-插入排序

    插入排序的基本操作就是将一个数据插入到已经排好序的有序数据中,从而得到一个新的、个数加一的有序数据。插入排序方法分...

  • 算法-插入排序

    算 法:插入排序算法时间复杂度: 插入排序算法描述 插入排序伪代码 插入排序实现 插入排序算法概述 插入排...

  • python 冒泡排序和选择排序算法

    插入排序算法 冒泡排序算法

  • 说说算法那些事-冒泡排序

    冒泡排序是通过数据比较大小交换位置的排序。阅读代码更有助于理解。查看完整代码 一.算法思想: 1、冒泡排...

  • 说说算法那些事-希尔排序

    希尔排序是希尔(Donald Shell)于1959年提出的一种排序算法。希尔排序也是一种插入排序,希尔排序法又称...

  • 说说算法那些事-堆排序

    堆排序(Heapsort)是指利用堆积树(堆)这种数据结构所设计的一种排序算法,它是选择排序的一种。堆分为大根堆和...

  • 说说算法那些事-快速排序

    快速排序(Quicksort)是对冒泡排序的一种改进。查看完整代码 1.算法思想:通过一个基准值把将要排序的元素分...

  • c算法O(n)^2(一)

    选择排序 插入排序 优化插入排序算法

  • Chapter 2 Foundation of Algorith

    Chapter 2 插入排序 线性查找 选择算法 归并排序算法 二分查找算法 冒泡排序 插入排序 循环不...

  • 算法入门——插入排序、快速排序

    上篇文章学习了算法入门——冒泡排序、选择排序,这篇文章我们学习算法入门——插入排序。 插入排序 插入排序是在一组列...

网友评论

      本文标题:说说算法那些事-插入排序

      本文链接:https://www.haomeiwen.com/subject/omozpxtx.html