欢迎交流讨论,转载请注明出处!

            插入排序(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))); 	} } 
              那么插入排序的时间复杂、空间复杂又是什么情况呢?