算法思路

  1. 从第一个元素开始,该元素可以认为已经被排序;
  2. 取出下一个元素,在已经排序的元素序列中从后向前扫描;
  3. 如果该元素(已排序)大于新元素,将该元素移到下一位置;
  4. 重复步骤3,直到找到已排序的元素小于或者等于新元素的位置;
  5. 将新元素插入到该位置后;
  6. 重复步骤2~5。
    动图:
    插入排序(动图理解)_插入排序

代码实现

  • 简洁版代码
public static void insertSort(int[] array){
        int temp=0,j=0;
        for(int i=1,len=array.length;i<len;i++){
            temp=array[i];
            j=i;
            while (j>0 && array[j-1]>temp){
                array[j]=array[j-1];
                j--;
            }
            array[j]=temp;
        }
    }
  • 完整版代码
package sort;

/**
 * 插入排序
 * 从第二个开始,一旦比前面的小就往前面插到自己合适的位置去,就跟打扑克牌抓了牌去插牌差不多
 * 2  3  1 5
 * 由于3比1大,让3往后移动,再跟2对比,2币1 大那么2也往后移动,直到停下来,把1放到属于自己的位置
 * 2  -  3  5
 * -  2  3  5
 * 1  2  3  5
 * @author humorchen
 */
public class InsertSort {

    public static void insertSort(int[] array){
        int temp=0,j=0;
        for(int i=1,len=array.length;i<len;i++){
            temp=array[i];
            j=i;
            while (j>0 && array[j-1]>temp){
                array[j]=array[j-1];
                j--;
            }
            array[j]=temp;
        }
    }
    public static void print(int[] array){
        System.out.println("打印现在的数据");
        for(int t:array){
            System.out.print(t+" ");
        }
        System.out.println();
    }
    public static void main(String[] args) {
        int[] array={4,3,2,5,6,1,3,7};
        insertSort(array);
        print(array);
    }
}