簡體   English   中英

這是shell排序還是插入排序?

[英]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 (殼那種間隙)和啟動子數組的索引和內部,而不是從移動kk-1您可以從移動kk+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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM