2013-12-09 29 views
0

所以我現在正在學習Java,我在問自己,爲什麼Insertion-Sort方法不需要使用swap操作?就我所知,元素被交換,所以在這種排序算法中使用交換操作不會有用嗎?爲什麼插入排序不需要交換操作?

正如我所說的,我是新來的,但我試着去了解這些算法的背景下,爲什麼他們是他們實際上是這樣

會很樂意爲一些見解:) B.

+0

你有沒有通過調試器的源代碼來驗證它沒有使用任何類型的交換操作?你可以在這裏粘貼代碼嗎? – Zavior

+1

你能提供代碼嗎?或者,你在問什麼? –

+0

您可能正在考慮*選擇排序*,該排序*通過列表的未排序部分運行,找到剩餘的最小元素,然後將其交換到位。 –

回答

0

Wikipedia的article for Insertion sort狀態

每次迭代時,插入排序去除從輸入 數據一個元件,發現它所屬的排序的列表中的位置,並插入 它那裏。它重複,直到沒有輸入元素。 [0121]如果 更小,則它在排序列表內找到正確的位置,移位 所有較大的數值達到一個空格,並插入到該正確的位置 。

你可以把這個轉變看作是一個極端互換。實際發生的情況是該值存儲在佔位符中,並與其他值進行檢查。如果這些值較小,則它們僅被移位,即。替換列表/數組中的前一個(或下一個)位置。佔位符的值然後被置於元素被轉移的位置。

+0

謝謝!非常幫助我! – user3084311

+0

如果不是大量交換操作,我無法看到如何有效地執行轉移。 –

+0

@Marko您不需要交換,只需覆蓋上一個或下一個位置的元素(取決於方向)。你的價值存儲在一個佔位符,所以你不會失去它。完成移位後,將值放入佔位符中的最新處理索引中。 –

0

插入排序不執行交換。它通過在順序列表中移動元素來執行插入操作,以便爲正在插入的元素騰出空間。這就是爲什麼它是O(N^2)算法:對於N中的每個元素,可以有O(N)個移位。

相關問題