希爾排序

概述

希爾排序是直接插入排序的改進(jìn),是一種非穩(wěn)定排序。
通過(guò)加大排序的間隔,并讓相隔這個(gè)"間隔"的子序列進(jìn)行插入排序。當(dāng)排序完一趟后,通過(guò)減小數(shù)據(jù)項(xiàng)的"間隔"依次排序下去。

java代碼

public class ShellSort {
    public static void main(String[] args) {
        int[] array = {98,21,62,48,33,6,55,17};
        System.out.print("ShellSort\n");
        printArray(array);
        System.out.print("start:\n");
        shellSort(array);
        System.out.print("end:\n");
    }

    static void shellSort(int[] arr){
        int increment = arr.length;
        while (true){
            increment = increment/3+1;

            for(int i=0;i<increment;i++){//分組
                //對(duì)分組進(jìn)行插入排序
                for(int j=i+increment;j<arr.length;j=j+increment){
                    int temp = arr[j];
                    for(int k = j-increment;k>=0;k=k-increment){
                        if(temp<arr[k]){
                            arr[k+increment] = arr[k];
                            arr[k] = temp;
                        }else{
                            arr[k+increment] = temp;
                            break;
                        }

                    }

                }
                printArray(arr);
            }

            if(increment==1){
                break;
            }
        }
    }

    static void printArray(int[] arr){
        for(int i=0;i<arr.length;i++){
            System.out.print(arr[i]+" ");
        }
        System.out.print("\n");
    }
}

輸出

ShellSort
98 21 62 48 33 6 55 17 
start:
48 21 62 55 33 6 98 17 
48 17 62 55 21 6 98 33 
48 17 6 55 21 62 98 33 
6 17 21 55 48 62 98 33 
6 17 21 33 48 55 98 62 
6 17 21 33 48 55 62 98 
end:

通過(guò)代碼發(fā)現(xiàn),直接插入排序與希爾排序的區(qū)別就是數(shù)據(jù)項(xiàng)間隔為1.

時(shí)間復(fù)雜度

平均時(shí)間復(fù)雜度 : O(n1.25)

空間復(fù)雜度

沒有分配額外空間,空間復(fù)雜度為O(1)。

?著作權(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)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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

  • 插入排序 直接插入排序的基本思想:每次將一個(gè)待排序的記錄,按其keyword的大小插入到前面已經(jīng)排好的子序列中的適...
    Sunrain16閱讀 1,275評(píng)論 0 3
  • 文 | 莫若吻 (注:如果想更好的理解希爾排序,請(qǐng)先看看我的上一篇博客插入排序,希望會(huì)對(duì)你有幫助。) 一、簡(jiǎn)介 希...
    Promise_Sun閱讀 66,190評(píng)論 18 62
  • 算法簡(jiǎn)介 希爾排序的由來(lái):1959 年 Shell 發(fā)明;第一個(gè)突破 O(n^2) 的排序算法;是簡(jiǎn)單插入排序的改...
    TinyDolphin閱讀 3,609評(píng)論 1 3
  • 一、簡(jiǎn)介 希爾排序,也稱遞減增量排序算法,是插入排序的一種更高效的改進(jìn)版本。 希爾排序是基于插入排序的以下兩點(diǎn)性質(zhì)...
    野狗子嗷嗷嗷閱讀 1,018評(píng)論 0 0
  • 這宮中的娘娘特別愛辦宴會(huì),三天一小宴,五天一大宴,生辰時(shí)就更不用說(shuō)了。 今日便是貴婦娘娘的生辰。 娘親本不愿意出席...
    瞳粹閱讀 321評(píng)論 0 2

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