簡體   English   中英

這是選擇排序還是插入排序?

[英]Is this a Selection sort or Insertion sort?

假設我們正在使用某種二次排序算法對十個整數的數組進行排序。 在算法的主循環經過四次迭代之后,數組元素的排序如下所示:

1 2 3 4 5 0 6 7 8 9

哪種說法正確 (注意:我們的選擇排序將首先選擇最大的項目。)

A. 該算法可以是選擇排序或插入排序。

B. 該算法可能是selectionsort,但不能是insertsort。

C. 該算法可能是插入排序,但不能是選擇排序。

D. 該算法既不是選擇排序也不是插入排序。

我認為答案應該是A(插入排序和選擇排序)? 但是我在一些網站上發現正確答案是C。我不知道原因。 有人可以解釋一下。
如果我錯了,請糾正我。

資料來源: Google圖書

插入排序是可能的,因為當前快照剛剛完成了對數組從索引0到索引4的排序。

選擇排序將首先選擇最小值(在您的示例中為0),然后將其放在最左端。 因此答案是C。

對於最大優先選擇排序,此輸出是可能的。

它不能是最小的優先選擇排序,因為選擇排序會保持不變,即經過n次迭代后,列表中的前n個項目將被完全排序。 因此,如果這是一個選擇排序,則您希望在第一次迭代中將值為0的元素排序為索引0。 因此,在前4次迭代之后,列表看起來像0 1 2 3 ...

對於最大優先插入和最小優先插入插入,輸出都是可能的,因為插入排序的不變性不同。 在插入排序中,經過n次迭代后,列表中的前n個項(對於最大的第一個排序,后n個項)彼此相對排序,但不一定位於列表的最終位置。

對於最小的優先插入排序,經過4次迭代,可能會看到“不適當的位置” 0,因為排序尚未迭代到足以將0重新放置在其正確索引中的位置。

這可以是最大優先選擇排序或插入排序的輸出。 如果數組最初看起來像這樣,則在每種算法進行4次迭代后,它仍然看起來像那樣。 它不能是最小的優先選擇排序,因為經過4次迭代后,數組的前4個項將是0 1 2 3

根據我的回答是C. *

Selection sort-
    for(int x=0; x<n; x++){
        int index_of_min = x;
        for(int y=x; y<n; y++){
            if(array[index_of_min]>array[y]){
                index_of_min = y;
            }
        }
        int temp = array[x];
        array[x] = array[index_of_min];
        array[index_of_min] = temp;
    }

*

之所以如此,是因為在“選擇”排序中,您遍歷數組中x的數組,並在每次遍歷中找到最少的元素,並將該索引替換為a [x]。 在上述情況下

1 2 3 4 5 0 6 7 8 9

min元素為0,並且如果使用選擇排序,則它應該是最左邊的元素,因為整個數組中第一遍最小遍歷的選擇排序應為a [0]。 插入排序是可能的,因為在插入排序中,我們拾取元素並繼續將當前元素與左側的元素進行比較,直到當前元素位於正確的排序位置。我想說的是:*

> Here is an example: for sorting the array the array 52314  First, 2 is
> inserted before 5, resulting in 25314 Then,  3 is inserted between 2
> and 5, resulting in 23514 Next, one is inserted at the start, 12354
> Finally, 4 is inserted between 3 and 5, 12345.

*這樣就可以完成插入排序,因為它已經完成了第四遍的排序。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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