• 插入排序


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

  • 相关阅读:
    Codeforces 662D International Olympiad【贪心】
    LightOJ 1236 Pairs Forming LCM【整数分解】
    LightOJ 1341 Aladdin and the Flying Carpet【整数分解】
    LightOJ 1370 Bi-shoe and Phi-shoe【欧拉函数 && 质数】
    SGU 106 The equation【扩展欧几里得】
    unity 第三人称控制移动
    unity Animator做简单的人物动画
    unity 背包系统
    unity 针对UI的射线穿透的两种方式
    用角色控制器控制移动和碰撞
  • 原文地址:https://www.cnblogs.com/Michael2397/p/7528868.html
Copyright © 2020-2023  润新知