[英]Can someone explain to me what type of sort this is?
我找到了这种类型,有人可以向我解释它是什么类型的吗? 我认为这是一种选择是否正确? 嵌套循环如何工作?
for (i = 0; i < N; ++i) {
for (j = i + 1; j < N; ++j) {
if (toSort[i] > toSort[j]) {
temp = toSort[i];
toSort[i] = toSort[j];
toSort[j] = temp;
printf("%d is swapped with %d\n", toSort[i], toSort[j]);
}
}
}
您发布的算法看起来像冒泡排序,但它有一些错误。 请参阅下面的伪代码:
procedure bubbleSort(list : array of items)
loop = list.count;
for i = 0 to loop-1 do:
swapped = false
for j = 0 to loop-1 do:
if list[j] > list[j+1] then
swap(list[j], list[j+1])
swapped = true
end if
end for
if not swapped then
break
end if
end for
end procedure return list
这是冒泡排序的优化版本,它使用布尔“标志”来跳过不必要的迭代。
选择排序是不同的,因为它寻找最小的数字并将其插入到最后的位置。 选择排序的伪代码如下:
procedure selection sort
list : array of items
n : size of list
for i = 1 to n - 1
min = i
for j = i+1 to n
if list[j] < list[min] then
min = j;
end if
end for
if indexMin != i then
swap(list[min], list[i])
end if
end for
end procedure
这看起来像是冒泡排序的一种变体,但它似乎是错误的。 在这里,与经典的冒泡排序相比,内部循环看起来做了相反的工作。 在经典版本中,内循环“弹出”当前第 i 个元素,直到它就位。 在这个版本中,它试图“下沉”第 i 个元素。 但是,请注意,第 j 个元素始终与第 i 个元素交换,因此只要在 j 循环中时 i 是固定的,我们就会将第 j 个元素弄得一团糟,而所有这些元素小于第 i 个。 将第 i 个元素修改为第 j 个元素,然后将第 (j+1) 个元素实际上与第 j 个元素进行比较。 这是错误的(至少经典冒泡排序不是这样)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.