iT邦幫忙

2024 iThome 鐵人賽

DAY 25
0

倒數第五天,再堅持一下終點就在不遠處(累...
前面學習完Binary Search(二分法搜尋),再來看一下Cyclic Sort(循環排序)吧!

什麼是循環排序?

Cycle sort is an in-place, unstable sorting algorithm, a comparison sort that is theoretically optimal in terms of the total number of writes to the original array, unlike any other in-place sorting algorithm. It is based on the idea that the permutation to be sorted can be factored into cycles, which can individually be rotated to give a sorted result. -- Wiki

循環排序是一種原地(in-place)、不穩定的排序算法,它是一種比較排序算法。理論上,在對原陣列進行寫入的總次數上來說是最優的,和其他的原地排序算法不同。它的原理是將待排序的排列分解成多個循環,每個循環可以 單獨旋轉 ,最終得到排序結果。
(「單獨旋轉」的意思是在排序過程中,每個元素被移動到正確的位置,而這種移動發生在一個「循環」内。)

為什麼是"不穩定"的排序算法?
所謂不穩定的排序算法的定義是:如果有兩個相同的元素(在未排序陣列中值相同),排序後它們的相對順序可能不同。
而循環排序(Cyclic Sort)透過檢查每個元素應該在的位置後,直接把該元素放正確的位置。如果有兩個相同的元素需要被放置在同一個位置,這時兩個元素可能會交換位置,導致相對順序改變。

循環排序(Cyclic Sort)步驟
給定一陣列,陣列中有不同元素。給定元素x,我們可以從排序好的陣列中,直接找到元素x的索引值。

  1. 如果元素在尚未排序的情況下,已經在正確的位置,那就什麼都不做。

  2. 如果元素在尚未排序的情況下,不在正確的位置上,而這位置上目前有一個不同的元素y,我們必須先將元素y移動到屬於它的位置。不斷重複這個過程,直到元素x被移動到正確的位置上。以上步驟完成一個循環。

Reference: https://en.wikipedia.org/wiki/Cycle_sort


上一篇
[Day24] Heaters
下一篇
[Day26] 41. First Missing Positive
系列文
刷題筆記30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言