🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
:-: 14.4 插入排序 * * * * * **基本概念:** 它是一种简单直观的排序算法。它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。插入排序在实现上,通常采用in-place排序(即只需用到O(1)的额外空间的排序),因而在从后向前扫描过程中,需要反复把已排序元素逐步向后挪位,为最新元素提供插入空间。 **算法的运作:** 1、将待排序序列的第一个元素看做一个有序序列,把第二个元素到最后一个元素当成是未排序序列。 2、从头(第二个元素开始)到尾依次扫描未排序序列,将扫描到的元素(待插入元素)与在已排序序列中从后向前扫描到的元素做对比,如果待插入的元素与有序序列中的某个元素相等,则将待插入元素插入到相等元素的后面。或者待插入的元素大于有序序列中的某个元素且小于此元素的后一个元素,则将待插入元素插入到此元素的后面。 **图片示例:** :-: ![](https://box.kancloud.cn/dcfb7b961c787736bd640ec4db823203_811x505.gif) **代码实现:** ~~~ public void insertionSort(int nums[]) { for (int i = 1; i < nums.length; i++) { int temp = nums[i]; int j; for (j = i - 1; j >= 0 && nums[j] > temp; j--) { nums[j + 1] = nums[j]; } nums[j + 1] = temp; } } ~~~ **复杂度分析:** 时间复杂度:平均:O(n^2)、最坏:O(n^2)、最优:O(n)。 空间复杂度:O(1)。 **若有理解错误的、写错的地方、更好的思路,方法,望各位读者评论或者发邮件指正或指点我,不胜感激。** **本文主要参考以下文章:** [维基百科——插入排序](https://zh.wikipedia.org/wiki/%E6%8F%92%E5%85%A5%E6%8E%92%E5%BA%8F) [JS中常见排序算法(示例图片来源)](https://github.com/Sir814/Sort/blob/master/03.%E6%8F%92%E5%85%A5%E6%8E%92%E5%BA%8F.gif)