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

    现实中打牌

    接收到新牌后在已有的牌里面进行排序,然后找到属于自己的位置进行插入:

    1. 手中的牌永远是有序的

    Code

    package kb.algorithm;
    
    public class InsertionSort {
        public static void main(String[] args) {
            int[] a = new int[]{3, 6, 4, 7, 2};
            sort(a);
            StringBuilder sb = new StringBuilder(20);
            for (int i = 0; i < a.length; i++) {
                sb.append(a[i]);
                sb.append(",");
            }
            System.out.println(sb);
        }
    
        public static void sort(int[] a) {
            for (int i = 1; i < a.length; i++) {
                int currentValue = a[i];//相当于最新接到一张牌
                int j = i - 1;// j=i-1; 相当于从之前的所有牌里面进行比较,一直到满足的槽位
                for (; j >= 0; j--) {
                    if (a[j] > currentValue) {
                        a[j + 1] = a[j];
                    } else {
                        break;
                    }
                }
                a[j + 1] = currentValue;//执行插入。j已经是下一个位置了,j+1就是满足条件的槽位。
            }
        }
    }
    

    执行结果

    2,3,4,6,7,
    

    分析演示

    i循环控制接收新牌,j循环控制给新收到的牌找到一个合适的位置并进行查询。

    1. 属于稳定排序,大小相同的数据原有的顺序不会变
    2. 最好O(n)。
    3. 最坏O(n^2)。
    4. 平均O(n^2)。
    作者:iBrake
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利.
  • 相关阅读:
    hdu 1151
    DAG的最小路径覆盖和二分图的最大匹配
    二部图 最小点覆盖集与最大匹配的关系
    sdut 2151
    sdut Emergency
    作业
    Node.prototype.contains
    微博登录
    markdown
    Object.observe
  • 原文地址:https://www.cnblogs.com/Brake/p/14773814.html
Copyright © 2011-2022 走看看