zoukankan      html  css  js  c++  java
  • 插入排序

    /**
     * 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");
            }
        }
    
    }

  • 相关阅读:
    【iOS 实践笔记】UITableView顶部空白
    【iOS入门】dequeueReusableCellWithIdentifier:和dequeueReusableCellWithIdentifier:forIndexPath:的区别
    【iOS 入门】@class关键字
    【iOS 入门 动画学习】
    【android seekbar 增大拖动区域】
    【android 动画小技巧】一个控制顺序播放多个动画。
    【android 视频播放那些事之缓存】
    【java8 代码块新功能】
    Mac下使用gradlew命令
    Python格式符说明
  • 原文地址:https://www.cnblogs.com/Michael2397/p/7528868.html
Copyright © 2011-2022 走看看