插入排序

插入排序基本原理


每次從【未排序】中選取第一個元素放置到【已排序】的正確位置



版本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;
            /*每次循環(huán)把[i]插入到[0:i-1]的正確位置*/
            for(; j >= 0 && tmp < sorted[j]; j--) {
                compareTimes++;
                sorted[j+1] = sorted[j]; //后移
                moveTimes++;
            }
            compareTimes++;
            sorted[j+1] = tmp;
            moveTimes++;
        }
    }
}

參考


直接插入排序(哨兵和越界)
白話經典算法系列之二 直接插入排序的三種實現

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容