複習一下插入排序和希爾排序

2021-08-04 01:41:28 字數 1057 閱讀 9733

首先是插入排序

for (i = 1; i < n; i++)

for (j = i - 1; j >= 0 && a[j] > a[j + 1]; j--)

swap(a[j], a[j + 1]); 

如果完全按照插入排序的思維,先插入,再後推,程式語句塊會變得比較臃腫

這裡用多次swap的方法,可以讓項一步一步往前移動,語句塊就簡潔很多,效果和時間上是一樣的

******************************==

然後是希爾排序

for(gap=n/2;gap>0;gap/=2)

for (i = gap; i < n; i++)  

for (j = i - gap; j >= 0 && a[j] > a[j + gap]; j -= gap)

swap(a[j], a[j + gap]);

以,a[10]為例

1.gap=10/2=5,分成5組,步進為5

a0,a5

a1,a6

a2,a7

a3,a8

a4,a9

2.gap=5/2=2,分成2組,步進是2

a0 a2 a4 a6 a8

a1 a3 a5 a7 a9

3.gap=2/2=1,分成1組,步進為1

a0,a1,a2,a3,a4,a5,a6,a7,a8,a9

4.整體再進行一次插入排序,上面**我為了對比工整一點,沒加這一步,新增上就可以了

ps,以前剛學希爾的時候問過老師,為什麼這裡選插入不是冒泡

那麼既然是複習,也再提一點冒泡和插入的區別

乙個int陣列為,2,5,199,1

他是乙個比較規則的陣列,如果用冒泡,那他必須一步一步不斷交換位置,最後讓1到2的前面

1會先和2換位置,然後到了最後位置的2又會和5換位置

插入排序就只要換一次就可以了,希爾排序時乙個把陣列逐漸變得有序的過程,所以用插入

可以看到,希爾排序對比插入排序主要是新增了乙個步進的概念(嗯,步進,讓人回憶起了微控制器的內容,23333)

把這兩個的思路放在一起,就會變得簡單明瞭啦

插入排序和希爾排序

插入排序的基本操作就是將乙個資料插入到已經排好序的有序資料中,從而得到乙個新的 個數加一的有序資料,演算法適用於少量資料的排序,插入排序的基本思想是 每步將乙個待排序的紀錄,按其關鍵碼值的大小插入前面已經排序的檔案中適當位置上,直到全部插入完為止。public static void sortins...

插入排序和希爾排序

1.首先,排序按類來分有插入排序 選擇排序 交換排序和歸併排序,而插入排序又分為直接插入排序和希爾 shell 排序 選擇排序類又分為選擇排序和堆排序,交換排序分為氣泡排序和快速排序,今天主要分享插入排序和希爾排序。2.插入排序概念 插入排序 對乙個陣列中的數,比較大小,假設它是公升序排列,認為它的...

插入排序和希爾排序

author shenqi date 2018 1 15.插入排序 每步將乙個待排序的記錄,按其順序碼大小插入到前面已經排序的字序列的合適位置 從後向前找到合適位置後 直到全部插入排序完為止。從第乙個元素開始,該元素可以認為已經被排序 取出下乙個元素,在已經排序的元素序列中從後向前掃瞄 如果該元素 ...