本人One Coder博客:http://www.coderli.com/archives/insert-sort

转载请务必注明出处:One Coder - http://www.coderli.com/archives/insert-sort

   
   
   
   
  1. package lhz.algorithm.chapter.two; 
  2.  
  3. /** 
  4.  *  《插入排序 》,对少量元素进行排序的有效算法。 
  5.  *  《算法导论》原文摘要: 
  6.  * Insertion sort works the way many people sort a hand 
  7.  * of playing cards. We start with an empty left hand and the cards face down on 
  8.  * the table. We then remove one card at a time from the table and insert it 
  9.  * into the correct position in the left hand. To find the correct position for 
  10.  * a card, we compare it with each of the cards already in the hand, from right 
  11.  * to left, as illustrated in Figure 2.1. At all times, the cards held in the 
  12.  * left hand are sorted, and these cards were originally the top cards of the 
  13.  * pile on the table.  
  14.  * 伪代码如下:  
  15.  * for j<- 2 to length[A]  
  16.  *  do key <- A[j]  
  17.  *      >Insert A[j] into the sorted sequence A[1..j-1] (>符号代表后面的部分是注释) 
  18.  *      i <- j-1  
  19.  *      while i>0 and A[i]>key  
  20.  *          do A[i+1] <- A[i]  
  21.  *          i <- i-1  
  22.  *      A[i+1] <- key  
  23.  * 算法复杂度:n^2 
  24.  * @author lihzh(苦逼coder) 
  25. * 本文地址:http://mushiqianmeng.blog.51cto.com/3970029/728821
  26.  */ 
  27. public class InsertionSort { 
  28.  
  29.     private static int[] input = new int[] { 21549867103 }; 
  30.  
  31.     /** 
  32.      * @param args 
  33.      */ 
  34.     public static void main(String[] args) { 
  35.         //从数组第二个元素开始排序,因为第一个元素本身肯定是已经排好序的 
  36.         for (int j = 1; j < input.length; j++) {// 复杂度 n 
  37.             int key = input[j]; 
  38.             int i = j - 1
  39.             //依次跟之前的元素进行比较,如果发现比前面的原素小,则交换位置,最终完成排序。 
  40.             while (i >= 0 && input[i] > key) {//复杂度:1+2+...+(n-1)=Θ(n^2) 
  41.                 input[i + 1] = input[i]; 
  42.                 input[i] = key; 
  43.                 i--; 
  44.             } 
  45.         } 
  46.         /* 
  47.          * 所以最终复杂度为n*n=n^2。最优情况下(即都已经排列好的情况下),第二个n=1, 所以在最优情况下,复杂度为n。 
  48.          */ 
  49.         // 打印数组 
  50.         printArray(); 
  51.     } 
  52.  
  53.     private static void printArray() { 
  54.         for (int i : input) { 
  55.             System.out.print(i + " "); 
  56.         } 
  57.     } 

 本人One Coder博客:http://www.coderli.com/archives/insert-sort

转载请务必注明出处:One Coder - http://www.coderli.com/archives/insert-sort