插入排序,好比是洗扑克一样,我们将牌分作两堆,每次从后面一堆的牌抽出最前端的牌,然后插入前面一堆牌的适当位置,例如:
				
				
						
						
								排序前: [92], 77, 67, 8, 6, 84, 55, 85, 43, 67  -- 将数组分为两部分,第一个元素为一组
第 1 次排序:[77 92] 67 8 6 84 55 85 43 67     -- 将后一组的第一个元素 77 插入前一组的适当位置
第 2 次排序:[67 77 92] 8 6 84 55 85 43 67     -- 将后一组的第一个元素 67 插入前一组的适当位置
第 3 次排序:[8 67 77 92] 6 84 55 85 43 67     -- 将后一组的第一个元素 8 插入前一组的适当位置 
第 4 次排序:[6 8 67 77 92 84] 55 85 43 67      -- 将后一组的第一个元素 6 插入前一组的适当位置
第 5 次排序:[6 8 67 77 84 92 55] 85 43 67      -- 将后一组的第一个元素 84 插入前一组的适当位置
第 6 次排序:[6 8 55 67 77 84 92 85] 43 67      -- 将后一组的第一个元素 55 插入前一组的适当位置
第 7 次排序:[6 8 55 67 77 84 85 92 43] 67      -- 将后一组的第一个元素 85 插入前一组的适当位置
第 8 次排序:[6 8 43 55 67 77 84 85 92] 67      -- 将后一组的第一个元素 43 插入前一组的适当位置
第 9 次排序:[6 8 43 55 67 67 77 84 85 92]      -- 将后一组的第一个元素 67 插入前一组的适当位置
Java代码实现,如下:
						
				
		
		
				 
				 /** */
				
						/**
				/** */
				
						/**
						 
 * 插入排序
  * 插入排序
 *  
						@param
						  data:等代排序整型数组
  *  
						@param
						  data:等代排序整型数组
 *     data = { 92, 77, 67, 8, 6, 84, 55, 85, 43, 67 }
  *     data = { 92, 77, 67, 8, 6, 84, 55, 85, 43, 67 }
 *     排序结果:
  *     排序结果:
 *        第 1 次排序:77 92 67 8 6 84 55 85 43 67
  *        第 1 次排序:77 92 67 8 6 84 55 85 43 67 
 *        第 2 次排序:67 77 92 8 6 84 55 85 43 67
  *        第 2 次排序:67 77 92 8 6 84 55 85 43 67 
 *        第 3 次排序:8 67 77 92 6 84 55 85 43 67
  *        第 3 次排序:8 67 77 92 6 84 55 85 43 67 
 *        第 4 次排序:6 8 67 77 92 84 55 85 43 67
  *        第 4 次排序:6 8 67 77 92 84 55 85 43 67 
 *        第 5 次排序:6 8 67 77 84 92 55 85 43 67
  *        第 5 次排序:6 8 67 77 84 92 55 85 43 67 
 *        第 6 次排序:6 8 55 67 77 84 92 85 43 67
  *        第 6 次排序:6 8 55 67 77 84 92 85 43 67 
 *        第 7 次排序:6 8 55 67 77 84 85 92 43 67
  *        第 7 次排序:6 8 55 67 77 84 85 92 43 67 
 *        第 8 次排序:6 8 43 55 67 77 84 85 92 67
  *        第 8 次排序:6 8 43 55 67 77 84 85 92 67 
 *        第 9 次排序:6 8 43 55 67 67 77 84 85 92
  *        第 9 次排序:6 8 43 55 67 67 77 84 85 92 
 */
   
						*/
				
				 

 public
				 
				void
				 insertSort(
				int
				 data[])
				public
				 
				void
				 insertSort(
				int
				 data[]) 
				
						 {
				
				
						{
 int
						 k, temp, max 
						=
						 data.length;
        
						int
						 k, temp, max 
						=
						 data.length;


 for
						 (
						int
						 i 
						=
						 
						1
						; i 
						<
						 max; i
						++
						)
        
						for
						 (
						int
						 i 
						=
						 
						1
						; i 
						<
						 max; i
						++
						) 
						
								 {
						
						
								{
 temp 
								=
								 data[i]; 
								//
								 后一组的第一个元素
            temp 
								=
								 data[i]; 
								//
								 后一组的第一个元素
								
										
										 k 
								=
								 i 
								-
								 
								1
								; 
								//
								 从前一组的最后一个元素开始比较
								
								            k 
								=
								 i 
								-
								 
								1
								; 
								//
								 从前一组的最后一个元素开始比较
								
										
										 
										 while
								 (temp 
								<
								 data[k])
								
								            
								while
								 (temp 
								<
								 data[k]) 
								
										 {
								
								
										{
 data[k 
										+
										 
										1
										] 
										=
										 data[k]; 
										//
										 如果前一组元素大于后一组第一个元素,则后移
                data[k 
										+
										 
										1
										] 
										=
										 data[k]; 
										//
										 如果前一组元素大于后一组第一个元素,则后移
										
												
												 k
										--
										;
										
										                k
										--
										;
 if
										 (k 
										==
										 
										-
										1
										)
                
										if
										 (k 
										==
										 
										-
										1
										)
 break
										; 
										//
										 如果前一组元素比较完,则跳出
                    
										break
										; 
										//
										 如果前一组元素比较完,则跳出
										
												
												 }
										
										            }
								
								
										
										 data[k 
								+
								 
								1
								] 
								=
								 temp; 
								//
								 插入适当的位置
            data[k 
								+
								 
								1
								] 
								=
								 temp; 
								//
								 插入适当的位置
								
										
										 
								
								
										
										 System.out.print(
								"
								 第  
								"
								 
								+
								 i 
								+
								 
								"
								  次排序: 
								"
								);
            System.out.print(
								"
								 第  
								"
								 
								+
								 i 
								+
								 
								"
								  次排序: 
								"
								);

 for
								 (
								int
								 j 
								=
								 
								0
								; j 
								<=
								 max 
								-
								 
								1
								; j
								++
								)
            
								for
								 (
								int
								 j 
								=
								 
								0
								; j 
								<=
								 max 
								-
								 
								1
								; j
								++
								) 
								
										 {
								
								
										{
 System.out.print(data[j] 
										+
										 
										"
										   
										"
										);
                System.out.print(data[j] 
										+
										 
										"
										   
										"
										);
 }
            }
								
								
										
										 System.out.println();
            System.out.println();
 }
        }
						
						
								
								 }
    }