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

插入排序【算法导论】

作者: 比轩 | 来源:发表于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;
        }
    }
    

    相关文章

      网友评论

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

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