插入排序

现实中打牌

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

  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)。
posted @ 2021-05-16 14:42  ibrake  阅读(64)  评论(0编辑  收藏  举报