【发布时间】:2012-02-18 22:50:32
【问题描述】:
给定一个长度为 n 的值数组,有没有办法计算插入排序将执行的交换次数,以便比 O(n2) 在时间上更好地对该数组进行排序?
例如:
arr[]={2 ,1, 3, 1, 2}; // Answer is 4.
算法:
for i <- 2 to N
j <- i
while j > 1 and a[j] < a[j - 1]
swap a[j] and a[j - 1] //I want to count this swaps?
j <- j - 1
【问题讨论】:
-
编写自己的交换算法,并跟踪交换次数。
-
为什么答案是 4?您可以使用 2 次交换对其进行排序(将
arr[0]与arr[3]交换,然后将arr[2]与arr[4]交换)。 -
O(n^2) 是插入/选择排序的比较次数,而不是交换。
-
您是要计算数学上最小的交换次数,还是某些特定算法完成的实际交换次数?
-
但是插入排序不执行“交换”。
标签: c++ c arrays algorithm sorting