插入排序(Insertion Sort)是一种简单直观的排序算法。通过构建有序序列,对于未排序数据,在已排序序列中从后面向前扫描,找到相应位置并插入。插入排序在实现上,通常采用in place排序(即只需用到O(1)的额外空间的排序),因而在从后向前扫描过程中,需要反复把已排序元素逐步向后挪位,为最新元素插入空间。

算法描述:

1,从第一个元素开始,该元素可以认为已经被排序。

2,取出下一个元素,在已经排序的元素序列中从后向前扫描。

3,如果该元素(已排序)大于新元素,该元素移到下一位置。

4,重复步骤3,直到找到已排序的元素小于或等于新元素的位置。

5,将新元素插入到该位置。

6,重复步骤2~5。

动图演示:

代码实现:

public class Sort{
       public static void printArr(int[] arr){
              for(int i:arr){
                  System.out.print(i+" ");
              }
       }

       public static void insertionSort(int[] arr){
              if(arr==null){
                   return;
              }   
              int j,current;           
              for(int i=0;i<arr.length-1;i++){                  
                    j=i+1;
                    //目标元素的值
                    current=arr[j];
                    //j>0条件一定要放在前面,否则报错,下标超出数组范围
                    while(j>0&&current<arr[j-1]){
                          //将比目标元素大的元素向后挪一位
                          arr[j]=arr[j-1];
                          j--;
                    }      
                    arr[j]=current;
               }
         }

         public static void main(String[] args){
               int[] arr=new int[]{3,44,38,5,47,15,36,26,27,2,46,4,19,50,48};
               insertionSort(arr);
               printArr(arr);
         }
}

 

 posted on 2018-07-17 20:34  会飞的金鱼  阅读(115)  评论(0)    收藏  举报