繁体   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