[英]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.