所以我正在学习Java,我问自己,为什么Insertion-Sort方法不需要使用交换操作?据我所知,元素被交换,因此在这种排序算法中使用交换操作不是很有用吗?
正如我所说,我是新手,但我试着了解这些算法的背景,为什么它们实际上是这样的
很高兴获得一些见解:) 乙
答案 0 :(得分:0)
维基百科的article for Insertion sort州
每次迭代,插入排序都会从输入中删除一个元素 数据,在排序列表中查找它所属的位置,以及 把它插入那里。它重复直到没有输入元素。 [...]如果 更小,它在排序列表中找到正确的位置,移位 所有较大的值最多可以创建一个空格,并插入其中 正确的位置。
您可以将此转变视为极端交换。实际发生的是值存储在占位符中并与其他值进行检查。如果这些值较小,则只需移动它们,即。替换列表/数组中的上一个(或下一个)位置。然后将占位符的值放在元素移位的位置。
答案 1 :(得分:0)
插入排序不执行交换。它通过移动顺序列表中的元素来执行插入,以便为正在插入的元素腾出空间。
这就是为什么它是O(N ^ 2)算法:对于N中的每个元素,可以有O(N)个移位。