[英]Is this a shell sort or an insertion sort?
我剛剛開始學習排序算法,並在網上找到了一個。 起初我認為這是一個shell排序,但它缺少“k”的明顯間隔和數組的減半所以我不確定它是否是。 我的第二個猜測是插入排序,但我只是在這里仔細檢查:
for(n = 1; n < num; n++)
{
key = A[n];
k = n;
while((k > 0) && (A[k-1] > key))
{
A[k] = A[k-1];
k = k-1;
}
A[k] = key;
}
此外,如果你能解釋為什么這也有幫助
Shell Sort包含許多在原始數組的子數組上執行的插入排序。
您提供的代碼是插入排序。
為了得到希爾排序,這將是大約有其他for
代碼改變約S h
(殼那種間隙)和啟動子數組的索引和內部,而不是從移動k
到k-1
您可以從移動k
到k+h
(或kh
取決於你進行插入排序的方向)
我認為你是對的,這看起來很像插入排序 。
此片段假設已插入
如果A[0]
。
n == 0
,那么k > 0
檢查將失敗並且執行將繼續在A[k] = key;
,將第一個元素正確存儲到數組中。
該片段還假設A[0:n-1]
已經排序。 它檢查A[n]
並開始向后掃描數組,向前移動每個大於原始A[n]
鍵的元素。
一旦掃描遇到小於或等於鍵的元素,它就會將其插入該位置。
它被稱為插入排序,因為行A[k] = key
將當前值插入到部分排序的數組中的正確位置。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.