我认为选择排序有以下行为:
最佳案例:由于所有元素都已正确排列,因此无需转换
最坏情况:需要进行n-1次交换,即每次传递都需要交换,并且有n-1次传递,因为我们知道n是数组中元素的数量
平均情况:无法找到此信息。找到它的程序是什么?
以上信息是否正确?
这表示交换的时间复杂度在最好的情况下是O(n) http://ocw.utm.my/file.php/31/Module/ocwChp5SelectionSort.pdf
答案 0 :(得分:5)
选择排序的每次迭代都包括扫描整个数组,找到尚未放置的最小元素,然后将其交换到适当的位置。在一个简单的选择排序实现中,这意味着无论输入数组中的元素分布如何,总会有n - 1个交换。
但是,如果要最小化交换次数,则可以实现选择排序,以便在要移动的元素已经位于正确位置的情况下,它不会执行交换。如果您添加此限制,那么您将更正在最佳情况下进行零交换。 (我不确定以这种方式修改选择排序是否值得,因为在大多数情况下交换非常快)。
真的,这取决于实施。您可能有一个奇怪的选择排序实现,在每次迭代时不断地将候选最小元素交换到其暂定的最终点,这将在最坏的情况下显着增加交换的数量。不过,我不确定你为什么要这样做。这样的小细节说明了为什么你的解释似乎与你在网上找到的东西不一致 - 取决于代码的组合方式,交换的数量可能不同。
答案 1 :(得分:0)
选择排序的最佳情况和最差情况运行时间是n ^ 2。这是因为无论元素最初是如何排列的,在主for循环的i迭代中,算法总是检查每个剩余的n-i元素以找到剩下的最小元素。
选择排序是一种算法,它采用最小数量的交换,并且在最好的情况下,当输入处于排序数组(如1,2,3,4)时,它采用ZERO(0)交换。但更相关的问题是选择排序中交换次数最差的情况是什么?它会发生哪些输入?
答案:交换次数最差的情况是n-1。但是对于刚刚相反排序的输入不会发生这种情况,而像6,5,3,2,1那样反向排序的输入并没有采取最差的交换次数而是需要n / 2次交换。那么,交换次数采用N-1交换的实际输入是什么,如果再分析一下,你会发现最坏的情况发生在“SINE WAVE KIND OF ANPUT”中。也就是说,增加和减少输入,与波峰和波谷相同。
7 6 8 5 9 4 10 3 - 输入八(8)个元素因此需要7个交换
3 6 8 5 9 4 10 7(1)
3 4 8 5 9 6 10 7(2)
3 4 5 8 9 6 10 7(3)
3 4 5 6 9 8 10 7(4)
3 4 5 6 7 8 10 9(5)
3 4 5 6 7 8 10 9(6)
3 4 5 6 7 8 9 10(7)
因此证明了选择排序中交换次数最差的情况是n-1,最佳情况是0,平均值是(n-1)/ 2交换。