已排序列表上的选择排序比较和交换

时间:2017-12-10 18:58:05

标签: java algorithm sorting insertion-sort

我的样本最终论文中的一个问题是:如果大小为n的输入已经排序,那么选择排序算法会进行多少次比较和交换?显示您的工作如何得出数字。假设只在必要时才进行交换。 https://imgur.com/a/bemaL

{1, 3, 4, 5, 7}的逻辑是

1与3 4 5 7进行比较,因此n-1比较和0交换

3与4 5 7进行比较,因此n-2比较和0交换

4与5 7相比,因此n-3比较和0交换

5与7比较,因此n-4比较和0交换。

因此比较次数为n-1 + n-2 + n-3 + n-4。互换的数量将为零。

我的逻辑是否正确?如果是这样,我如何回答任何n个长度元素的问题?

1 个答案:

答案 0 :(得分:0)

没有你的逻辑是错的。你不明白它是如何工作的。这是两个用于插入排序的循环。

  for (int i = 0; i < n; i++) {
            for (int j = i; j > 0 && less(a[j], a[j-1]); j--) {
                exch(a, j, j-1);
            }
            assert isSorted(a, 0, i);

1与3 4 5不比较,但3与1比较,因为它大于内部的环断裂,则4与3比较,因为4> 1。 3然后再次内循环中断。

尝试插入值并看到内部循环将中断并且不会发生交换。因此总共有O(n-1)比较,即O(n)。

如果您反转输入数组,那么它将具有最差的时间复杂度,即O(n ^ 2)比较和交换。