插入排序

/**
 * Project Name:Algorithm
 * File Name:InsertSort.java
 * Package Name:
 * Date:2017年9月15日下午8:19:11
 * Copyright (c) 2017, chenzhou1025@126.com All Rights Reserved.
 *
 */

/**
 * ClassName:InsertSort 
 * Function: 插入排序,测试数据集:6 5 3 1 8 7 2 4 
 * Reason:     (1)平均O(n^2),最好O(n),最坏O(n^2);空间复杂度O(1);稳定;简单
 *             (2)插入即表示将一个新的数据插入到一个有序数组中,并继续保持有序。
 *             例如有一个长度为N的无序数组,进行N-1次的插入即能完成排序;
 *             第一次,数组第1个数认为是有序的数组,将数组第二个元素插入仅有1个有序的数组中;
 *             第二次,数组前两个元素组成有序的数组,将数组第三个元素插入由两个元素构成的有序数组中......
 *             第N-1次,数组前N-1个元素组成有序的数组,将数组的第N个元素插入由N-1个元素构成的有序数组中,则完成了整个插入排序。
 * Date:     2017年9月15日 下午8:19:11 
 * @author   michael
 * @version  
 * @since    JDK 1.7
 * @see      
 */
public class InsertSort {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String input = "";
        while (sc.hasNext()) {
            input = sc.nextLine();
            System.out.println("输入值:" + input);
            long startTime = System.currentTimeMillis();
            String[] str = input.split(" ");
            int[] arr = new int[str.length];
            // 字符串数组转化成int数组
            for (int i = 0; i < str.length; i++) {
                arr[i] = Integer.parseInt(str[i]);
            }
/*            for (int i = 1; i < arr.length; i++) {
                int change = arr[i];
                int j = i;
                while(j>0 && change<arr[j-1]){
                    arr[j] = arr[j-1];
                    j--;
                }
                arr[j] = change;
                System.out.println();
                System.out.print("第" + (i + 1) + "次循环结果:");
                for (int k = 0; k < arr.length; k++) {
                    System.out.print(arr[k]);
                }
            }*/
            
            for (int i = 1; i < arr.length; i++) {
                int target = arr[i];
                int j = i;
                for (; j >0 && target<arr[j-1]; j--) {
                    arr[j] = arr[j-1];
                }
                arr[j] = target;
                
                System.out.println();
                System.out.print("第" + (i) + "次循环结果:");
                for (int k = 0; k < arr.length; k++) {
                    System.out.print(arr[k]);
                }
                
            }
            
            long endTime = System.currentTimeMillis();
            System.out.println();
            System.out.println();
            System.out.println("最终排序结果:");
            for (int j = 0; j < arr.length; j++) {
                System.out.print(arr[j]);
            }
            System.out.println("程序运行时间:" + (endTime - startTime) + "ms");
        }
    }

}

原文地址:https://www.cnblogs.com/Michael2397/p/7528868.html