美文网首页
插入排序【算法导论】

插入排序【算法导论】

作者: 比轩 | 来源:发表于2019-11-13 21:46 被阅读0次

注:学习算法导论,按照标准伪代码理解翻译为java实现,如有兴趣理解整个过程的细节,建议阅读《算法导论》第二章:2.1插入排序。

  • 标准实现:从左往右排序
void insertionSort(int[] arr) {
    int i;
    for (int j = 1; j < arr.length; j++) {
        i = j - 1;
        int key = arr[j];
        // 当i大于当前key元素时一直向前继续比较
        while (i >= 0 && arr[i] > key) {
            // 满足while条件,说明 i 对应的元素一定大于 i + 1 对应的元素和key
            // 所以 i 对应的元素向后移动一位
            arr[i + 1] = arr[i];
            // i 再向前移动
            i = i - 1;
        }
        // 循环结束后,i + 1 指向的位置肯定为空缺的
        // 此时key 满足 key > A[i] and key <= A[i + 2]
        // 所以将key置于 i+1 的位置
        arr[i + 1] = key;
        // 每次循环结束都能保证key左侧的元素有序
        // System.out.println(Arrays.toString(arr));
    }
}
  • 本章练习:从右往左,降序倒排
/**
 * 从后往前排
 * @param arr
 */
void insertionSortDownTo(int[] arr) {
    int i;
    for (int j = arr.length - 2; j >= 0; j--) {
        int key = arr[j];
        i = j + 1;
        while (i < arr.length && arr[i] < key) {
            arr[i - 1] = arr[i];
            i++;
        }
        arr[i - 1] = key;
    }
}

相关文章

  • lecture 1

    算法导论Lesson1 课程简介: 内容主要包括: 算法的含义、意义的简要介绍; 算法的分析; 插入排序、合并排序...

  • 2018-08-08 算法导论(2.1 插入排序)

    算法导论学习101 首先,对于插入排序算法的大致描述为下输入为: < a1, a2, a3, ... , an >...

  • 第1天-插入排序

    算法说明 插入排序是算法导论一书中第一个算法,在书中举了一个非常恰当的扑克牌例子来说明插入排序的算法原理:Inpu...

  • 算法导论-插入排序

    1.伪代码 算法流程图示 2.Python代码 result: 循环不变性: 初始化: 循环的第一次迭代之前,他为...

  • 插入排序【算法导论】

    注:学习算法导论,按照标准伪代码理解翻译为java实现,如有兴趣理解整个过程的细节,建议阅读《算法导论》第二章:2...

  • 讨厌算法的程序员 1 - 插入排序

    讨厌算法的程序员系列入口 什么是算法 在说插入排序之前,我们了解下《算法导论》对算法的从两种不同角度的定义。 一般...

  • 排序算法入门之「插入排序」

    插入排序 借用《算法导论》里的例子,就是我们打牌的时候,每新拿一张牌都会把它按顺序插入,这,其实就是插入排序。 齐...

  • 算法导论-算法基础-插入排序

    插入排序 输入:n个数的一个序列 。输出:输入序列的一个排列 ,满足a1'≤a2'≤…≤an'。 j表示正准备插入...

  • 计数排序、基数排序和桶排序

    阅读经典——《算法导论》07 到目前为止,我们已经介绍了插入排序、归并排序、堆排序、快速排序这四种排序算法,他们的...

  • 算法导论1.2 插入排序

    这个小结主要是用插入排序法,讲了一下什么是“循环不变式”,这个方法主要是用来证明你的算法是OK的,用python实...

网友评论

      本文标题:插入排序【算法导论】

      本文链接:https://www.haomeiwen.com/subject/bqokictx.html