欢迎交流讨论,转载请注明出处!
插入排序(insertion Sort) 的算法描述是一种简单直观的排序算法。其工作原理是通过构建有序
序列,对于为排序数据,在已排序序列中从后向前开始扫描,找到相应的位置并进行插入操作。插
入排序一般只需要用到O(1)的空间,因而在从后向前扫描的时候,需要将排好序的元素进行挪动
为最新元素提供插入位置。
首先看看插入排序的动态演示:
算法描述:
1、从第一个元素开始,可以被认为已经排好序了。
2、取下一个元素,在已经排好的元素序列中从后向前扫描。
3、如果该元素(已排序)大于新元素,则将该元素一到下一位置。
4、重复步骤3,直到已排序的元素小于或等于新元素的位置
5、将新元素插入该位置。
6、重复步骤2~5
Tips:这里如果比较操作的代价过大的话,可以使用二分查找法进行优化。减少比较的次数。
其工作过程看下面的动态图
看看代码实现吧:
package com.kiritor; import java.util.Arrays; /** * 插入排序的简单实现 * * @author Kiritor */ public class Sort<T> { public static <T extends Comparable<? super T>> T[] insert_sort(T[] a) { int j; for (int p = 1; p < a.length; p++) { T tmp = a[p]; for (j = p; j > 0 && tmp.compareTo(a[j - 1]) < 0; j--) a[j] = a[j - 1];//元素后移 a[j] = tmp;//插入 System.out.println(Arrays.toString(a)); } return a; } public static void main(String[] args) { Integer[] integer ={12,1,423,123,6,5,10,8}; System.out.println(Arrays.toString(insert_sort(integer))); } }
那么插入排序的时间复杂、空间复杂又是什么情况呢?
转载于:https://blog.51cto.com/kiritor/1226685