算法-插入排序

2018/04/03 算法 插入排序 Java
  本文为「原创」内容,如需转载请注明出处!             
本文共 889 字,需 11 分钟阅读
  1. 算法可视化: 连接
  2. 时间复杂度,平均:\(O(n^2)\),最坏:\(O(n^2)\),最好:\(O(n)\)
  3. 空间复杂度,\(O(1)\)
  4. 是否稳定:稳定
  5. 本文图片来源:https://www.cnblogs.com/xiaoming0601/p/5862793.html

算法思想

通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应的位置并插入。 类似于扑克牌排序:

insert-sort

  1. 刚开始摸牌的时候左手是空的,接着一次从桌上摸一张牌,并将它插入到牌中的「正确」位置。
  2. 算法的核心步骤就是寻找「正确」位置。
    • 手中的牌是有序的,然后摸起一张牌 M。
    • 扫描手中的牌与 M 进行一一对比,找到插入的位置。
    • 将 M 插入找到的位置即可。
    • 为了提升效率,M 插入的时候牵涉到数组移动,所以可以一边对比一边移动,找到位置直接插入即可
/**
 * 插入排序
 *
 * @author ychost
 * @date 2018-4-3
 */
public class InsertSort {
    void sort(int[] data) {
        for (int i = 1; i < data.length; i++) {
            int cur = data[i];
            int j = i;
            //找到插入位置
            for (; j > 0; j--) {
                //一边比较一边移位
                if (cur < data[j - 1]) {
                    data[j] = data[j - 1];
                } else {
                    break;
                }
            }
            data[j] = cur;
        }
    }
}

搜索

    文章目录