排序之希爾排序

算法

希爾排序,希爾排序按其設(shè)計(jì)者唐納德.希爾(Donald Shell)的名字命名,該算法由1959年公布。也稱(chēng)遞減增量排序算法,實(shí)質(zhì)是改進(jìn)插入排序,改進(jìn)為分組插入排序。

原始數(shù)組 6 5 4 3 2 1 操作
gap=3, i=3, j=3 3 5 4 6 2 1 num[3]和num[0]值互換
gap=3, i=4, j=4 3 2 4 6 5 1 num[4]和num[1]值互換
gap=3, i=5, j=5 3 2 1 6 5 4 num[5]和num[2]值互換
gap=3循環(huán)結(jié)束
gap=1, i=1, j=1 2 3 1 6 5 4 num[1]和num[0]值互換
gap=1, i=2, j=2 2 1 3 6 5 4 num[2]和num[1]值互換
gap=1, i=2, j=1 1 2 3 6 5 4 num[1]和num[0]值互換
gap=1, i=3, j=3 1 2 3 6 5 4 num[3]>num[2],跳過(guò)
gap=1, i=4, j=4 1 2 3 5 6 4 num[4]和num[3]值互換
gap=1, i=4, j=3 1 2 3 5 6 4 num[3]>num[2],跳過(guò)
gap=1, i=5, j=5 1 2 3 5 4 6 num[5]和num[4]值互換
gap=1, i=5, j=4 1 2 3 4 5 6 num[4]和num[3]值互換
gap=1循環(huán)結(jié)束

Java代碼實(shí)現(xiàn)
int[] insertionSort(int[] num) {
    int j;
    //步長(zhǎng)
    int gap;
    //步長(zhǎng)遞減循環(huán)
    for (gap = num.length; gap > 0; gap /= 2) {
        //分組循環(huán)
        for (int i = gap; i < num.length; i++) {
            int temp = num[i];
            //插入排序
            for (j = i; j >= gap && temp < num[j - gap]; j -= gap) {
                num[j] = num[j - gap];
            }
            num[j] = temp;
        }
    }
    return num;
}

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容