美文网首页
插入排序

插入排序

作者: SetsunaChiya | 来源:发表于2017-01-01 23:22 被阅读0次

    插入排序基本原理


    每次从【未排序】中选取第一个元素放置到【已排序】的正确位置



    版本1:直接开辟n的空间

    版本2:直接插入排序,无哨兵

    Sort::DirectInsertionSort_2() {
        int tmp;
        /*从[1]开始,[0]已经有序了*/
        for(int i = 1; i < sorted.size(); i++) {
            /*反之,[i]的位置本来就是正确的,不需要交换*/
            if(sorted[i] < sorted[i-1]) {
                tmp = sorted[i];
                moveTimes++;
                int j = i - 1;
                /*每次循环把[i]插入到[0:i-1]的正确位置*/
                for(; j >= 0 && tmp < sorted[j]; j--) {
                    compareTimes++;
                    sorted[j+1] = sorted[j]; //后移
                    moveTimes++;
                }
                compareTimes++;
                sorted[j+1] = tmp;
                moveTimes++;
            }
        }
    }
    

    参考


    直接插入排序(哨兵和越界)
    白话经典算法系列之二 直接插入排序的三种实现

    相关文章

      网友评论

          本文标题:插入排序

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