码迷,mamicode.com
首页 > 编程语言 > 详细

插入排序

时间:2021-05-24 12:38:02      阅读:0      评论:0      收藏:0      [点我收藏+]

标签:ati   build   app   接收   ring   end   就是   一个   void   

现实中打牌

技术图片

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

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

插入排序

标签:ati   build   app   接收   ring   end   就是   一个   void   

原文地址:https://www.cnblogs.com/Brake/p/14773814.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!