先用簡單的一句話概括,每次用陣列中乙個數字,與他之前的所有資料進行比較,如果滿足條件則更換順序。光這麼說,感覺還是有些晦澀難懂,那我們來舉個例子看看吧,畢竟要學以致用呀,奧利給。
1、假設我們現在有乙個陣列:
2、那麼我們需要先拿出最前面的兩位----
<1>、進行比較,並且是用最有一位向前進行比較,3<5,那麼交換位置,變為
3、那麼我們需要先拿出最前面的三位----
<1>、進行比價,並且是用最有一位向前進行比較,2<5,那麼交換位置
<2>、變為,這個時候再用倒數第二位,進行比價2<3;那麼交換位置,變為
4、那麼我們需要先拿出最前面的四位位----
<1>、進行比價,並且是用最有一位向前進行比較,4<5,那麼交換位置,
<2>、變為這個時候再用倒數第二位,進行比價4>3;那麼不必交換位置
<3>、結束本次比較,返回
5、那麼我們需要先拿出最前面的五位位----
<1>、進行比價,並且是用最有一位向前進行比較,1<4,那麼交換位置,
<2>、變為這個時候再用倒數第二位,進行比價1<5;那麼交換位置
<3>、變為,這個時候再用倒數第三位,進行比價1<3;那麼交換位置,
<4>、變為,這個時候再用倒數第四位,進行比價1<2;那麼交換位置,
<5>、變為,這個時候再用倒數第五位,沒有值了。
<6>、結束本次比較,返回
如果還是覺得不夠清晰,那麼請看**下面的圖例
public void test1()
/*** 總體思路
* 比如有乙個陣列列:5,3,2,4,1
* * 一、先拿出2個來,也就是小標是的數字,頭兩個數字先比較,
* * 二、再拿出3個來,也就是小標是的數字,頭三個數字先比較,
* ......
* n、在拿出n個來,也就是下標【n-1】的數字,n個數字進行比較,
* 這個時候,前面的n-1個陣列都是有序的,我們只要拿著第n個數,
* 找到他在前面n-1個數字插入的位置,那麼排序就完成了。
*///外層迴圈控制次數,保證讓後面沒有拿到的數字,再比較,比如說
//其實分步來寫,就是控制每次比較的長度:
//一、從下標開始,不是從0開始,拿出前兩個5,3
//二、從下標開始,拿出前三個3,5,2
總體思路:還是先用一句話概括一下,希爾排序就是在快速排序的基礎上,每次比較的時候將陣列根據步長分為若干組。即步長有是幾,我們就可以分為幾組。一般我們計算步長的方法是:陣列長度/2。
資料結構 插入排序 希爾排序
一 插入排序 1 介紹 插入排序 insertion sort 的演算法描述是一種簡單直觀的排序演算法。它的工作原理是通過構建有序序列,對於未排序資料,在已排序序列中從後向前掃瞄,找到相應位置並插入。插入排序在實現上,通常採用in place排序 即只需用到o 1 的額外空間的排序 因而在從後向前掃...
資料結構之希爾排序(插入排序)
希爾排序 shell s sort 又稱 縮小增量排序 diminishing increment sort 是插入排序的一種,因d.l.shell於1959年提出而得名。希爾排序的誕生是由於插入排序在處理大規模陣列的時候會遇到需要移動太多元素的問題。希爾排序的思想是將乙個大的陣列 分而治之 劃分為...
資料結構09 插入排序 希爾排序
1 利用位移法,每次選擇乙個還未排序的資料和已經排過序的所有資料進行比較 2 如果已排序的數比需要排序的數大,則向後移動,讓位 不是交換 3 直到找到已排序的數比需要排序的數小時,證明已經找到了需要排序數應該插入的位置 4 將需要排序的數插入進合適的位置 1 在插入排序的基礎上改進的 2 每次得到乙...