任何排序算法的成本最高的操作是什么?是交换操作还是比较操作?
我认为这是交换,但我的朋友认为这是比较。我可以证明这种比较的唯一方法是更昂贵的操作是需要比较每个元素,但不是每个元素都需要交换(即如果元素已经在正确的位置,则不必交换)。因此,总体而言,总体而言,与少数昂贵的掉期相比,有更便宜的比较。但我不确定答案。有什么想法吗?
答案 0 :(得分:1)
假设所有内容都在RAM中完成,交换操作在原子上比比较操作快。 (非常明显,2读取cpu操作与2次读取,2次写入以及介于两者之间的所有内容,包括注册表操作)。
这显然取决于你的排序算法,有些做的比较少,因为元素较少,但交换频率较高。
快速排序将进行少量比较然后交换几乎所有东西和一个更简单的算法,如冒泡排序,将所有元素相互比较然后交换较少。这也取决于基本数组,如果一切已经接近排序,冒泡排序不会交换任何东西,但仍然比较一切,而heapsort(例如)仍然需要"交换"一切。
最后(平均交换操作次数)(交换操作的时间成本)/(comp操作的平均数)(comp操作的时间成本)很难估算算法,并且它可以推断出所有算法。
我个人认为,任何排序算法的所有交换成本总是高于比较成本,但我无法用任何证据支持该声明(这只是个人见解)