插入排序

Posted

Catch Spark. Code

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了插入排序相关的知识,希望对你有一定的参考价值。

现实中打牌

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

  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)。

以上是关于插入排序的主要内容,如果未能解决你的问题,请参考以下文章

KDoc:插入代码片段

代码片段使用复杂的 JavaScript 在 UIWebView 中插入 HTML?

将代码片段插入数据库并在 textarea 中以相同方式显示

关于在各浏览器中插入音频文件的html代码片段

初识Spring源码 -- doResolveDependency | findAutowireCandidates | @Order@Priority调用排序 | @Autowired注入(代码片段

初识Spring源码 -- doResolveDependency | findAutowireCandidates | @Order@Priority调用排序 | @Autowired注入(代码片段