希爾排序(Shell Sort)

來源:互聯網
上載者:User

這個排序看起來比冒泡選擇,插入都難,邏輯複雜一些。

憑直覺啊,就知道這個不簡單,有點怕怕。

沒有辦法,給自己心理一個暗示,一定要看完這8個基本排序演算法的,慢慢來吧。

java代碼實現:


public static void shell_sort(int array[],int lenth){ 
int temp = 0; 
int incre = lenth; 
while(true){ 
incre = incre/2; 
for(int k = 0;k<incre;k++){
for(int i=k+incre;i<lenth;i+=incre){
for(int j=i;j>k;j-=incre){
if(array[j]<array[j-incre]){
temp = array[j-incre];
                      array[j-incre] = array[j];
                      array[j] = temp;
}
else{
break;
}
}
}
}
}
}

先把代碼拿出來參考吧

整體思想:

在要排序的一組數中,根據某一增量分為若干子序列,並對子序列分別進行插入排序。
然後逐漸將增量減小,並重複上述過程。直至增量為1,此時資料序列基本有序,最後進行插入排序。

不理解,什麼增量,這個概念都不說清楚。那我就自己的理解就是一個數,因為數有大小,那就有增量,增量就是一個數增加了多少。


我自己來說吧:在一個數組中,分組,然後對每一組用插入排序。怎麼分組呢,就是開始對半分,對每一組又對半分就是了。這個就是他說的增量的遞減了,

那最後到一組中只有一個數字了,那就不能分組了。

現在數組基本上九有序了,

最後來一下插入排序


設計步驟:

1.方法接受一個數組,一個length。這個length就是增量了,shell排序,就是增量分割排序。

2.真的不是想放棄的原因,實在是載入代碼到腦子裡可能又造成的短路之類的吧。

這個while(true)我想不到,現在我抄下來又有什麼用,等到我自己寫的時候又想不到,只能靠背誦,肯定背不出來的。之前就背過,腦子一片空

3,根據基本思想來了,在分組中是有一個迴圈分組的思想的,這裡可能要用到了while迴圈的寫法,什麼時候退出,就是這個增量等於一了。

4.增量開始是傳進來的數值,每走一趟迴圈,增量就除2.

5.                  for(int k = 0;k<incre;k++){
for(int i=k+incre;i<lenth;i+=incre){
for(int j=i;j>k;j-=incre)

這幾個嵌套的迴圈是什麼意思,不懂。


網上的人寫的什麼思路完全用不到,這個我覺得必須要分開一步步,思路都是假的,只有分開一步步,別人按照分開的一步步走下去沒問題才行。我這裡5就卡主了。

有必要說明一下這些個迴圈都是為什麼。為了達到什麼目的。

我自己的思路,是必須迴圈分開的左右兩邊的數組。

還是用數字帶入理解一下了

increae就5

然後length是10

   for(int k = 0;k<5;k++){
for(int i=k+5;i<10;i+=5){
for(int j=i;j>k;j-=5)

有理解了:

最外層0到5迴圈,再裡面是5到10一個迴圈。如果變數的換就是一個數組的左右兩邊

然後再裡面一個迴圈是從10到5遞減的判斷一下 array[j]<array[j-incre]  10到5的數字中,後面的比前面小就交換一下,不是就進行下一次比較。

這兩左右兩邊的數組都比較完了。

思想就是,我吧一個數組的左右兩邊的都迴圈一遍。


這個多層迴圈看來還是邏輯太複雜了。

自己還是沒有清楚,FACK


相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.