排序算法(一)直接插入排序
2017-10-22 13:35
393 查看
直接插入排序 (Insertion Sort)
介绍:
插入排序(Insertion Sort)的算法描述是一种简单直观的排序算法。它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。插入排序在实现上,通常采用in-place排序(即只需用到O(1)的额外空间的排序),因而在从后向前扫描过程中,需要反复把已排序元素逐步向后挪位,为最新元素提供插入空间。直接插入排序代码实现(java)
/** *插入排序 *@paramarr *@return */ private static int[] insertSort(int[] arr) { if (arr == null || arr.length < 2) { //判断数组是否为空或长度小于2,返回 return arr; } for (int i = 1; i < arr.length; i++) { for (int j = i; j > 0; j--) { if (arr[j] < arr[j - 1]) { // 如果后者大于前者则互换 int temp = arr[j]; arr[j] = arr[j - 1]; arr[j - 1] = temp; } else { // 接下来是无用功 break; } } } return arr; }
步骤:
从第一个元素开始,该元素可以认为已经被排序取出下一个元素,在已经排序的元素序列中从后向前扫描
如果该元素(已排序)大于新元素,将该元素移到下一位置
重复步骤3,直到找到已排序的元素小于或者等于新元素的位置
将新元素插入到该位置中
重复步骤2
插入排序过程动画:
性能分析:
时间复杂度:当数据正序时,执行效率最好,每次插入都不用移动前面的元素,时间复杂度为O(N)。
当数据反序时,执行效率最差,每次插入都要前面的元素后移,时间复杂度为O(N²)。
所以,数据越接近正序,直接插入排序的算法性能越好。
空间复杂度
由直接插入排序算法可知,我们在排序过程中,需要一个临时变量存储要插入的值,所以空间复杂度为 1 。
算法稳定性
直接插入排序的过程中,不需要改变相等数值元素的位置,所以它是稳定的算法。
相关文章推荐
- 十二.C语言8种排序算法及其实现 1.希尔排序 2.二分插入法 3.直接插入法 4.带哨兵的直接排序法 5.冒泡排序 6.选择排序 7.快速排序 8.堆排序
- 排序算法之直接插入排序、选择排序和冒泡排序
- 排序算法(一)直接插入排序和希尔排序
- 8种排序算法--直接插入排序
- 排序算法之直接插入排序
- js实现排序算法(冒泡排序,直接插入排序)
- 【排序算法】直接插入排序(java实现)
- 各种排序算法的实现直接插入排序
- 排序算法之直接插入排序的思想以及Java实现
- 插入排序算法--直接插入算法,折半排序算法,希尔排序算法(C#实现)
- 直接插入排序法---排序算法(一)
- 【Java常用排序算法】插入排序(直接插入排序、希尔排序)
- 【数据结构】——排序算法——1.1、直接插入排序
- 五十道编程小题目 --- 28 八大排序算法 java 之 01直接插入排序
- 浅析各类排序算法(四) 插入类排序之直接插入排序及折半插入,2-路插入算法
- 排序算法原理及其Java代码(快速排序、冒泡排序、直接插入排序、简单选择排序)
- PHP排序算法之直接插入排序(Straight Insertion Sort)实例分析
- 排序算法(直接插入排序)
- 排序算法-直接插入排序
- 排序算法之直接插入排序