我的样本最终论文中的一个问题是:如果大小为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个长度元素的问题?
答案 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)比较和交换。