排序算法——插入排序

原理

数据分为 有序 | 无序两个部分。以升序为例,遍历数组,为当前值寻找在有序部分的合适位置插入并结束子循环,寻找的过程中将有序部分的值右移。

复杂度分析

平均时间复杂度为O(n^2)
时间复杂度最坏为O(n^2)
空间复杂度为 O(1)
稳定

代码实现

 public void sort(List<V> srcList, Comparator<V> comparator) {
        if (srcList == null || srcList.size() <= 2) {
            return;
        }
        for (int index = 0; index < srcList.size(); index++) {
            V element = srcList.get(index);
            V e2;
            int destIndex = index;
            //从有序部分最末向前遍历,如果元素大于当前值element,将其后移一位,反之已找到合适位置,结束循环,插入element
            for (int j = index - 1; j >= 0 && comparator.compare(e2 = srcList.get(j), element) > 0; j--) {
                srcList.set(j + 1, e2);//后移一位
                destIndex = j;
            }
            if (destIndex != index) {
                srcList.set(destIndex, element);
            }
        }
    }
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 冒泡排序插入排序插入排序和冒泡排序分析 冒泡排序 冒泡排序(英语:Bubble Sort,台湾另外一种译名为:泡沫...
    六尺帐篷阅读 2,241评论 0 9
  • 插入排序基本思想是通过构建有序序列,对于未排序的数据,在已排序的数据中从后往前进行扫描,找到相应的位置插入。 时间...
    叶孤陈阅读 158评论 0 1
  • 插入排序(Insert Sort)直接插入排序的基本操作是将一个记录插入到已经排好的有序表中,从而得到一个新的、记...
    GB_speak阅读 247评论 0 0
  • 插入排序:非常好理解,插入排序,就像我们平时在打扑克过程中整理手中排的过程一样,从一侧到另一侧,选择一张牌,找到最...
    关玮琳linSir阅读 332评论 0 25
  • 这是水果的最后一幅了,自我感觉是水果中最好的。
    白色冰菊阅读 155评论 4 6