ํ๊ธ ๋ฌธ์ | English Document

GoSortingAlgorithms
Go ์ธ์ด๋ก ์์ฑ๋ ๋ค์ํ ์ ๋ ฌ ์๊ณ ๋ฆฌ์ฆ๋ค์ด ์์ต๋๋ค :octocat:
:beginner: ์ค์น ๋ฐฉ๋ฒ
Go ์ธ์ด๊ฐ ์ค์น ๋์ด ์๋ค๋ฉด, go get ๋ช
๋ น์ด๋ฅผ ์คํํ์ฌ GoSoringAlgorithms ํจํค์ง๋ฅผ ๋ฐ์์ต๋๋ค.
$ go get github.com/kdgyun/GoSortingAlgorithms
:book: ์ฌ์ฉ ์ค๋ช
์
๊ฐ๋จํฉ๋๋ค!
package main
import (
"github.com/kdgyun/GoSortingAlgorithms/sorts"
crand "crypto/rand"
"fmt"
"math"
"math/big"
"math/rand"
"sort"
)
func SliceBuilder(len int) []int {
seed, _ := crand.Int(crand.Reader, big.NewInt(math.MaxInt64))
rand.Seed(seed.Int64())
var slice []int
for i := 0; i < len; i++ {
slice = append(slice, rand.Int())
}
return slice
}
func main() {
slice := SliceBuilder(1000000)
sorts.QuickSort(slice)
isSorted := sort.SliceIsSorted(slice, func(i, j int) bool {
return slice[i] < slice[j]
})
fmt.Print(isSorted)
}
:test_tube: ๊ฐ๋จํ ํ
์คํธ ๋ฐฉ๋ฒ
symplytest ๋ฅผ ํตํด ์ฝ๊ฒ ํ
์คํธ ํ ์ ์์ต๋๋ค.
package main
import (
"github.com/kdgyun/GoSortingAlgorithms/simplytest"
)
func main() {
simplytest.RunTest()
}
์ถ๋ ฅ ์์
+==================================================================================+
| Random Test |
+==================================================================================+
...
[array length : 100000]
make arrays...
running bubble sort...
running cocktail sort...
...
running intro sort...
running parallel intro sort...
running cycle sort...
+-------------------------------------------------------------------------------------------------+
| name | ns | ms | verify | (err mag)
|-------------------------------------------------------------------------------------------------|
| bubble sort | 13016202738 ns | 13016 ms | true |
|-------------------------------------------------------------------------------------------------|
| cocktail sort | 8922656474 ns | 8922 ms | true |
|-------------------------------------------------------------------------------------------------|
| tim sort | 11419013 ns | 11 ms | true |
|-------------------------------------------------------------------------------------------------|
| bitonic sort | 32333072 ns | 32 ms | true |
|-------------------------------------------------------------------------------------------------|
...
|-------------------------------------------------------------------------------------------------|
| intro sort | 6665792 ns | 6 ms | true |
|-------------------------------------------------------------------------------------------------|
| parallel intro sort | 2537508 ns | 2 ms | true |
|-------------------------------------------------------------------------------------------------|
| cycle sort | 20209957747 ns | 20209 ms | true |
+-------------------------------------------------------------------------------------------------+
Option
option.go
๋ฅผ ํตํด ์ฌ์ฉ์๊ฐ ์ฝ๊ฒ ํ
์คํธ ํ์์ ์กฐ์ ํ ์ ์์ผ๋ฉฐ, 3๊ฐ์ง ์ฃผ์ ์ต์
์ ์ ๊ณตํฉ๋๋ค.
-
์ ๋ ฌ ์๊ณ ๋ฆฌ์ฆ ์ ํ
ํน์ ์ ๋ ฌ ์๊ณ ๋ฆฌ์ฆ๋ง ํ
์คํธ ํน์ ์ ์ธํ๊ณ ์ ํ๋ค๋ฉด ํ
์คํธํ๊ณ ์ ํ๋ ์ ๋ ฌ ์๊ณ ๋ฆฌ์ฆ ์ด๋ฆ์ ์ฐพ์ ๋ณ์๋ฅผ true ๋๋ false๋ก ๋ณ๊ฒฝํฉ๋๋ค. (True : ํ
์คํธ ํ์ฉ, false : ํ
์คํธ ๋นํ์ฉ)
ex) SHELL_SORT Activate = true
-
ํ
์คํธ ํ ์ฌ๋ผ์ด์ค์ ๊ธธ์ด ๋ณ๊ฒฝ.
ํ
์คํธํ ์ฌ๋ผ์ด์ค์ ๊ธธ์ด๋ฅผ ๋ณ๊ฒฝํ๋ ค๋ฉด 'lengths' ๋ณ์์ ์ฌ๋ผ์ด์ค๋ฅผ ์ํ๋ ๊ฐ์ผ๋ก ์ค์ ํ ์ ์์ต๋๋ค. ์๋ ์์๋ ๊ธธ์ด 35, 50,000, 100,000 ์ฌ๋ผ์ด์ค์ ๋ํด ๊ฐ๊ฐ ํ
์คํธ ํ๊ฒ ๋ฉ๋๋ค.
ex) var lengths = [...]int{35, 50000, 100000}
-
์ฌ๋ผ์ด์ค ์ ํ ๋ณ๊ฒฝ.
๊ธฐ๋ณธ์ ์ผ๋ก ์ค๋ฆ์ฐจ์, ๋ด๋ฆผ์ฐจ์ ๋ฐ ๋๋ค ๋ฐ์ดํฐ๋ก ๊ตฌ์ฑ๋ ๊ฐ๊ฐ์ ๋ชจ๋ ์ฌ๋ผ์ด์ค๊ฐ ํ
์คํธ๋ฉ๋๋ค. ๊ทธ๋ฌ๋ ํน์ ๋ฐ์ดํฐ ์ ํ์ ๋นํ์ฑํํ๋ ค๋ฉด ๋ณ์๋ฅผ false๋ก ๋ณ๊ฒฝํ๋ฉด ๋ฉ๋๋ค.
ex) ASCENDING_TEST Activate = false
:mag_right: ๊ฐ์
Go ์ธ์ด๋ ๋ฐฐ์ด๊ณผ ์ฌ๋ผ์ด์ค๊ฐ ๊ตฌ๋ถ๋์ด ์์ต๋๋ค. ํ์ง๋ง, ์ผ๋ฐ์ ์ผ๋ก ๊ธฐํ ์ธ์ด์์๋ ๋ฐฐ์ด์ด ์ต์ํ๊ธฐ ๋๋ฌธ์ ํด๋น ์๊ณ ๋ฆฌ์ฆ์ ์ค๋ช
ํ ๋์๋ ๋ฐฐ์ด๋ก ํต์ผํ์ฌ ์ค๋ช
ํฉ๋๋ค.
ํ์ฌ ์
๋ฐ์ดํธ ๋ ์ ๋ ฌ ์๊ณ ๋ฆฌ์ฆ:
Bubble Sort
๋ฒ๋ธ ์ ๋ ฌ์ ์ธ์ ํ ์์๋ฅผ ๋ฐ๋ณต์ ์ผ๋ก ๋น๊ตํ๊ณ ๊ตํํ๋ ๋ฐฉ์์
๋๋ค.
ํด๋น ๊ตฌํ์ ์ด๋ฏธ ๋ฐฐ์ด์ด ์ ๋ ฌ๋์ด์๋ ๊ฒฝ์ฐ ์ ๋ ฌ์ ์ข
๋ฃํ๋๋ก ์ต์ ํ๋์ด ์์ต๋๋ค. ์ต์ ํ๋ฅผ ์ํ์ง ์๋๋ค๋ฉด, bubbleSort ํจ์์์ swapped ๋ณ์๋ฅผ ์ญ์ ๋ฐ ํด๋น ์กฐ๊ฑด๋ฌธ์ ์ญ์ ํ๋ฉด ๋ฉ๋๋ค.
COMPLEXITY
) | ) | or ) | Yes | Yes | total : , auxiliary : ) |
Cocktail Sort
์นตํ
์ผ ์ ๋ ฌ์ ๋ฒ๋ธ ์ ๋ ฌ์ ๊ธฐ๋ฐํ ๋ณํ ๋ ์๊ณ ๋ฆฌ์ฆ์
๋๋ค. Cocktail shaker sort(์นตํ
์ผ ์
ฐ์ด์ปค ์ ๋ ฌ), bidirectional bubble sort(์๋ฐฉํฅ ๋ฒ๋ธ ์ ๋ ฌ), cocktail sort(์นตํ
์ผ ์ ๋ ฌ), shaker sort(์
ฐ์ด์ปค ์ ๋ ฌ) ์ด๋ผ๊ณ ๋ ๋ถ๋ฆฝ๋๋ค.
COMPLEXITY
) | ) | ) | Yes | Yes | total : , auxiliary : ) |
Insertion Sort
์ฝ์
์ ๋ ฌ์ ๊ฐ ๋ฐ๋ณต๋ง๋ค ๋ฐฐ์ด์ ์์์๋ถํฐ ์ฐจ๋ก๋๋ก ์ด๋ฏธ ์ ๋ ฌ๋ ๋ฐฐ์ด ๋ถ๋ถ๊ณผ ๋น๊ตํ์ฌ ์์ ์ ์์น๋ฅผ ์ฐพ์ ์ฝ์
์์๋ฅผ ์ฐพ์ ์ฌ๋ฐ๋ฅธ ์์น์ ๋ฐฐ์นํ๊ฒ ๋ฉ๋๋ค.
COMPLEXITY
) | ) | ) | Yes | Yes | total : , auxiliary : ) |
Selection Sort
์ ํ ์ ๋ ฌ์ ์ ๋ ฌ๋์ง ์์ ๋ถ๋ถ์์ ๊ฐ ๋ฐ๋ณต์ ํตํด ๊ฐ์ฅ ์์ ์์๋ฅผ ์ฐพ์ ์ ์์น์ ๋ฐฐ์นํ๊ฒ ๋ฉ๋๋ค.
COMPLEXITY
) | ) | ) | Yes | No | total : , auxiliary : ) |
Shell Sort
์
ธ ์ ๋ ฌ์ ์ฝ์
์ ๋ ฌ์ ํ์ฅํ ๋ฒ์ ์
๋๋ค. ๋จผ์ ์ผ์ ๊ฐ๊ฒฉ์ผ๋ก ์๋ก ๋ฉ๋ฆฌ ๋จ์ด์ ธ ์๋ ์์๋ฅผ ์ฝ์
์ ๋ ฌํด ๋๊ฐ๋ฉด์ ๋ค์์๋ ๊ทธ ์ฌ์ด์ ๊ฐ๊ฒฉ์ ์ค์ฌ๋๊ฐ๋ฉด์ ์ ๋ ฌํ๊ฒ ๋ฉ๋๋ค.
*์ ์ฉ ๋ Gap ์ํ์ค๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค. Ciura sequence
COMPLEXITY
or ) | depends on gap sequence | or ) | Yes | No | total : , auxiliary : ) |
Merge Sort
๋ณํฉ ์ ๋ ฌ์ ๋ถํ ์ ๋ณต ์๊ณ ๋ฆฌ์ฆ์ ๊ธฐ๋ฐ์ผ๋ก ํฉ๋๋ค.
๊ฐ๋
์ ์ผ๋ก ๋ณํฉ ์ ๋ ฌ์ ๋ค์๊ณผ ๊ฐ์ด ์๋ํฉ๋๋ค:
- ์ ๋ ฌ๋์ง ์์ n๊ฐ์ ์์๋ฅผ ๊ฐ๋ ๋ฐฐ์ด์ ์ฌ๊ท์ ์ผ๋ก ์ต์ ํ๋ ์ด์์ ์์๋ฅผ ํฌํจํ๋ ๋ฐฐ์ด์ด ๋๋๋ก ์ ๋ฐ์ผ๋ก ๋๋๋๋ค(์์๊ฐ ํ ๊ฐ๋ง ์๋ ๋ฐฐ์ด์ ์ ๋ ฌ๋ ๊ฒ์ผ๋ก ๊ฐ์ฃผ๋ฉ๋๋ค).
- ๋ถํ ๋ ๋ฐฐ์ด์ด ๋ชจ๋ ํฉ์ณ์ง ๋ ๊น์ง ๋ฐ๋ณต์ ์ผ๋ก ๋ณํฉํ์ฌ ์ ๋ ฌ ํฉ๋๋ค.
3๊ฐ์ง ์ ํ์ ๋ณํฉ ์ ๋ ฌ์ ์ง์ํฉ๋๋ค.
- top-down
ํํฅ์ ๋ณํฉ ์ ๋ ฌ ์๊ณ ๋ฆฌ์ฆ์ ๋ถํ ๋ ๋ฐฐ์ด์ ํฌ๊ธฐ๊ฐ 1์ด ๋ ๋๊น์ง ๋ฐฐ์ด์ ์ฌ๊ท์ ์ผ๋ก ๋ถํ ํ ๋ค์ ํด๋น ํ์ ๋ฐฐ์ด๋ค์ ๋ณํฉํ์ฌ ์ ๋ ฌ๋ ๋ชฉ๋ก์ ์์ฑํฉ๋๋ค.
- bottom-up
์ํฅ์ ๋ณํฉ ์ ๋ ฌ ์๊ณ ๋ฆฌ์ฆ์ ํฌ๊ธฐ๊ฐ 1์ธ n๊ฐ์ ํ์ ๋ฐฐ์ด์ ๋ ๋ฒํผ ์ฌ์ด์์ ์ ๋ค๋ก ํ์ ๋ฐฐ์ด๋ค์ ๋ฐ๋ณต์ ์ผ๋ก ๋ณํฉํฉ๋๋ค.
- parallel
๋ณ๋ ฌ ๋ณํฉ ์ ๋ ฌ ์๊ณ ๋ฆฌ์ฆ์ ์ฌ๊ท ํธ์ถ์ ๋ณ๋ ฌํ๋ฅผ ํตํด ํ์ ๋ฐฐ์ด์ ํฌ๊ธฐ๊ฐ ์๊ณ๊ฐ๋ณด๋ค ์์์ง ๋๊น์ง ๋ฐฐ์ด์ ์ฌ๊ท์ ์ผ๋ก ๋ถํ ํ ๋ค์ ๋ณํฉํ๋ ํํฅ์ ์ ๋ ฌ์ ์ํํฉ๋๋ค. ์ด ๋, ์๊ณ๊ฐ๋ณด๋ค ์์ ํ์ ๋ฐฐ์ด๋ค์ ์ํฅ์ ์ ๋ ฌ์ ์ฌ์ฉํ์ฌ ์ ๋ ฌํ๊ฒ ๋ฉ๋๋ค.
COMPLEXITY
) | ) | ) | No | Yes | total : , auxiliary : ) |
Heap Sort
ํ ์ ๋ ฌ์ ๋ฐฐ์ด์ ํ์ ์๋ฆฌ์ฒ๋ผ ๋ฐฐ์ด์์ ์์๋ฅผ ํ๋์ฉ ์ ๊ฑฐํ ๋ค์ ๋ฐฐ์ด์ ์ ๋ ฌ๋ ๋ถ๋ถ์ ์ฝ์
ํ์ฌ ์ ๋ ฌํ๊ฒ ๋ฉ๋๋ค.
COMPLEXITY
) | ) | ) | Yes | No | total : , auxiliary : ) |
Quick Sort
ํต ์ ๋ ฌ์ ๋ฐฐ์ด์์ ํน์ ํผ๋ฒ์ ์ ํํ ๋ค์ ํผ๋ฒ๋ณด๋ค ์์์ง ํฐ์ง์ ๋ฐ๋ผ ๋ค๋ฅธ ์์๋ฅผ ๋ ๊ฐ์ ํ์ ๋ฐฐ์ด๋ก ๋ถํ ํ๊ฒ ๋๋ ๋ถํ ์ ๋ณต ์๊ณ ๋ฆฌ์ฆ์ ๊ธฐ๋ฐ์ผ๋ก ํฉ๋๋ค. ์ฌ๊ท์ ์ผ๋ก ์ด ๊ณผ์ ์ ๊ฑฐ์ณ ์ ๋ ฌ๋ฉ๋๋ค.
3๊ฐ์ง ์ ํ์ ํต ์ ๋ ฌ์ ์ง์ํฉ๋๋ค.
- left-pivot (+parallel)
์ผ์ชฝ ํผ๋ฒ ํต ์ ๋ ฌ์ ์ผ์ชฝ ์์๋ฅผ ํผ๋ฒ์ผ๋ก ์ ํํ์ฌ ์ ๋ ฌํฉ๋๋ค.
- middle-pivot (+parallel)
์ค๊ฐ ํผ๋ฒ ํต ์ ๋ ฌ์ ์ค๊ฐ ์์๋ฅผ ํผ๋ฒ์ผ๋ก ์ ํํ์ฌ ์ ๋ ฌํฉ๋๋ค.
- right-pivot (+parallel)
์ค๋ฅธ์ชฝ ํผ๋ฒ ํต ์ ๋ ฌ์ ์ค๋ฅธ์ชฝ ์์๋ฅผ ํผ๋ฒ์ผ๋ก ์ ํํ์ฌ ์ ๋ ฌํฉ๋๋ค.
๋ํ ๊ฐ ์๊ณ ๋ฆฌ์ฆ์ ์ฌ๊ท ํธ์ถ์ ๋ณ๋ ฌํ๋ ์ง์ํฉ๋๋ค.
COMPLEXITY
) | ) | ) | Yes | No | total : , auxiliary : ) |
Dual-Pivot Quick Sort
์ด์ค ํผ๋ฒ ํต ์ ๋ ฌ์ Quick Sort๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํ์ง๋ง, ๋ฐฐ์ด์์ ๋ ๊ฐ์ ์์๋ฅผ ํผ๋ฒ(pivot)์ผ๋ก ์ ํํ์ฌ ์ ๋ ฌํ๋ ๋ฐฉ์์ ์ฐจ์ด๊ฐ ์์ต๋๋ค.
์ ๋ ฌํ ๋ฐฐ์ด์์ ๋ ๊ฐ์ ์์(ํผ๋ฒ)๋ฅผ ์ ํํ๊ณ ๋๋จธ์ง ์์๋ค์ ์์ ํผ๋ฒ(small pivot)๋ณด๋ค ์์ ์์, ํผ๋ฒ ์ฌ์ด์ ์๋ ์์, ํฐ ํผ๋ฒ(big pivot)๋ณด๋ค ํฐ ์์๋ก ๊ตฌ๋ถํ์ฌ ๋ฐฐ์ด์ ๋ถํ ํ๊ณ ์ด๋ฌํ ํํฐ์
์ ์ฌ๊ท์ ์ธ ๊ณผ์ ์ ํตํด ์ ๋ ฌํ๊ฒ ๋ฉ๋๋ค.
2๊ฐ์ง ์ ํ์ ์ด์ค ํผ๋ฒ ํต ์ ๋ ฌ์ ์ง์ํฉ๋๋ค.
- non-parallel
์ ๋ ฌํ ๋ฐฐ์ด์์ ๋ ๊ฐ์ ์์(ํผ๋ฒ)๋ฅผ ์ ํํ๊ณ ๋๋จธ์ง ์์๋ค์ ์์ ํผ๋ฒ(small pivot)๋ณด๋ค ์์ ์์, ํผ๋ฒ ์ฌ์ด์ ์๋ ์์, ํฐ ํผ๋ฒ(big pivot)๋ณด๋ค ํฐ ์์๋ก ๊ตฌ๋ถํ์ฌ ๋ฐฐ์ด์ ๋ถํ ํ๊ณ ์ด๋ฌํ ํํฐ์
์ ์ฌ๊ท์ ์ธ ๊ณผ์ ์ ํตํด ์ ๋ ฌํ๊ฒ ๋ฉ๋๋ค.
- parallel
์ฌ๊ท ํธ์ถ์ ๋ณ๋ ฌํ๋ฅผ ํตํด ๊ฐ๊ฐ์ ์ ๋ ฌ ์๊ณ ๋ฆฌ์ฆ์ ๋ถํ ๋ ๋ฐฐ์ด์ ํฌ๊ธฐ๊ฐ ์๊ณ๊ฐ๋ณด๋ค ์์ ๋๊น์ง ๋ฐฐ์ด์ ์ฌ๊ท์ ์ผ๋ก ๋ถํ ํ ๋ฐฐ์ด์ ๋ณํฉํ์ฌ ์ ๋ ฌํ๊ฒ ๋ฉ๋๋ค.
COMPLEXITY
) | ) | ) | Yes | No | total : , auxiliary : ) |
Binary Insertion Sort
์ด์ง ์ฝ์
์ ๋ ฌ์ ์ฝ์
์ ๋ ฌ์ ๊ธฐ๋ฐ์ผ๋ก ํ ํ์ฅ ๋ฒ์ ์
๋๋ค. ์ด์ง ์ ๋ ฌ์ด๋ผ๊ณ ๋ ํฉ๋๋ค.
์ด์ง ์ฝ์
์ ๋ ฌ์ ์ด์ง ๊ฒ์(Binary Search)์ ์ฌ์ฉํ์ฌ ๊ฐ ๋ฐ๋ณต ๊ณผ์ ์์ ํน์ ์์๋ฅผ ์ฝ์
ํ ์์น๋ฅผ ์ฐพ์ ์ฝ์
ํ๊ฒ ๋ฉ๋๋ค.
COMPLEXITY
) | ) | ) | Yes | yes | total : , auxiliary : ) |
Tim Sort
Timsort๋ ๋ค์ํ ์ข
๋ฅ์ ์ค์ ๋ฐ์ดํฐ์์ ์ ์ํ๋๋๋ก ์ค๊ณ๋ ์๊ณ ๋ฆฌ์ฆ์ผ๋ก, ๋ณํฉ ์ ๋ ฌ๊ณผ ์ฝ์
์ ๋ ฌ(๋๋ ์ด์ง ์ฝ์
์ ๋ ฌ)์์ ํ์๋์ด ํผํฉ ๋ ์์ ์ ์ธ ํ์ด๋ธ๋ฆฌ๋ ์ ๋ ฌ ์๊ณ ๋ฆฌ์ฆ ์
๋๋ค. Python ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์์ ์ฌ์ฉํ๊ธฐ ์ํด 2002๋
Tim Peters์ ์ํด ๊ตฌํ๋์์ต๋๋ค.
COMPLEXITY
) | ) | ) | Yes | yes | total : , auxiliary : ) |
Bitonic Sort
๋ฐ์ดํ ๋ ์ ๋ ฌ์ ๋ณ๋ ฌ๋ก ์คํํ ์ ์๋ ๋น๊ต ๊ธฐ๋ฐ ์ ๋ ฌ ์๊ณ ๋ฆฌ์ฆ์
๋๋ค. ๋ฌด์์ ์ซ์ ์ํ์ค๋ฅผ ๋จ์กฐ ์ฆ๊ฐํ๋ค๊ฐ ๊ฐ์ํ๋ ๋นํธ ์ํ์ค๋ก ๋ณํํ๋ ๋ฐ ์ค์ ์ ๋ก๋๋ค. ๋ณ๋ ฌ ํ๊ฒฝ์ ์ต์ ํ ๋์ด์์ผ๋ฉฐ GPU ๋ณ๋ ฌ ์ฒ๋ฆฌ๋ก ์ฌ์ฉ๋๊ธฐ๋ ํ์ง๋ง, ์ฌ๊ธฐ์๋ ๊ธฐํ ๋ณ๋ ฌํํ ์ ๋ ฌ ์๊ณ ๋ฆฌ์ฆ๋ค๊ณผ ๋ง์ฐฌ๊ฐ์ง๋ก GO ์ธ์ด์ ๋์์ฑ ๋ชจ๋ธ๋ก ๊ตฌํ๋ฉ๋๋ค.
2๊ฐ์ง ์ ํ์ ์๊ณ ๋ฆฌ์ฆ์ ์ง์ํฉ๋๋ค.
- non-parallel
๋ถํ ๋ ๋ฐฐ์ด์ ํฌ๊ธฐ๊ฐ 1์ด ๋ ๋๊น์ง ๋ฐฐ์ด์ ์ฌ๊ท์ ์ผ๋ก ๋ถํ ํ ๋ค์ Bitonic Sequencing Rule์ ๋ฐ๋ผ ํด๋น ํ์ ๋ฐฐ์ด์ ๋ณํฉํ์ฌ ์ ๋ ฌํ๊ฒ ๋ฉ๋๋ค.
- parallel
์ฌ๊ท ํธ์ถ์ ๋ณ๋ ฌํ๋ฅผ ํตํด ๋ถํ ๋ ๋ฐฐ์ด์ ํฌ๊ธฐ๊ฐ ์๊ณ๊ฐ๋ณด๋ค ์์์ง ๋๊น์ง ๋ฐฐ์ด์ ์ฌ๊ท์ ์ผ๋ก ๋ถํ ํ ๋ค์ ๋น๋ณ๋ ฌํ๋ก ์ ํํ์ฌ Bitonic Sequencing Rule์ ๋ฐ๋ผ ํ์ ๋ฐฐ์ด์ ๋ถํ ๋ฐ ๋ณํฉํ์ฌ ์์ฑํฉ๋๋ค.
COMPLEXITY
non-parallel | ) | ) | ) | Yes | No | total : , auxiliary : ) |
parallel | ) | ) | ) | Yes | No | total : , auxiliary : ) |
Intro Sort
์ธํธ๋ก ์ ๋ ฌ์ ์ต์
์ ๊ฒฝ์ฐ์๋ ํ๊ท ์ ์ผ๋ก ๋น ๋ฅธ ์ฑ๋ฅ๊ณผ ๋ฐ (์ ๊ทผ์ ์ผ๋ก) ์ต์ ํ ๋ ํ์ด๋ธ๋ฆฌ๋ ์ ๋ ฌ ์๊ณ ๋ฆฌ์ฆ์
๋๋ค. ํต์ ๋ ฌ๋ก ์์ํ์ฌ ์ฌ๊ท ๊น์ด๊ฐ ์ ๋ ฌ๋๋ ๋ฐฐ์ด์ ์์ ๊ฐ์์ ๋ฐ๋ฅธ ๊น์ด ์๊ณ๊ฐ(maximum depth:
) ์์ค์ ์ด๊ณผํ๋ฉด ํ ์ ๋ ฌ๋ก ์ ํํ๊ณ ๋ถํ ๋ ๋ฐฐ์ด์ ์์ ๊ฐ์๊ฐ ๊ธธ์ด ์๊ณ๊ฐ(16) ๋ฏธ๋ง์ด๋ฉด ์ฝ์
์ ๋ ฌ๋ก ์ ํํฉ๋๋ค.
2๊ฐ์ง ์ ํ์ ์๊ณ ๋ฆฌ์ฆ์ ์ง์ํฉ๋๋ค.
-
non-parallel
์ ๋ ฌํ ๋ฐฐ์ด์์ ํต ์ ๋ ฌ์ ์ฌ์ฉํ ๋ ์์(ํผ๋ฒ)๋ฅผ ์ ํํ๊ณ ์ ํ ๋ ํผ๋ฒ์ ์ ์ธํ ๋ค๋ฅธ ์์๋ค์ด ํผ๋ฒ๋ณด๋ค ์๊ฑฐ๋ ํฐ์ง ์ฌ๋ถ์ ๋ฐ๋ผ ๋ ๊ฐ์ ํ์ ๋ฐฐ์ด๋ก ๋ถํ ํ๊ณ ์ฌ๊ท ๊น์ด๊ฐ ํน์ ์๊ณ๊ฐ(maximum depth:
)์ ๋๊ธฐ ์ ๊น์ง ์ด๋ฌํ ๊ณผ์ ์ ์ฌ๊ท์ ์ผ๋ก ๊ฑฐ์นฉ๋๋ค.
-
parallel
์ฌ๊ท ํธ์ถ์ ๋ณ๋ ฌํ๋ฅผ ํตํด ๊ฐ ๋ณ๋ ฌํ ๋ ์ด์ค ํผ๋ฒ ํต ์ ๋ ฌ ์๊ณ ๋ฆฌ์ฆ์ ๋ถํ ๋ ๋ฐฐ์ด์ ํฌ๊ธฐ๊ฐ ์๊ณ๊ฐ๋ณด๋ค ์์์ง๊ธฐ ์ ๊น์ง ๋ฐฐ์ด์ ์ฌ๊ท์ ์ผ๋ก ๋ถํ ํ์ฌ ์ ๋ ฌํฉ๋๋ค.
COMPLEXITY
) | ) | ) | Yes | No | total : , auxiliary : ) |
Cycle Sort
์ํ ์ ๋ ฌ์ in-place ์ ๋ ฌ์ด์ ๋ถ์์ ์ ๋ ฌ ์๊ณ ๋ฆฌ์ฆ์ผ๋ก, ๋ฐฐ์ด์ ๋ํด ์ด ์ฐ๊ธฐ(write) ์์ ๊ด์ ์์ ๊ฐ์ฅ ์ ๊ฒ ์ฐ๊ธฐ ์ํ ๋น๊ต ์ ๋ ฌ ์๊ณ ๋ฆฌ์ฆ ์
๋๋ค.
COMPLEXITY
) | ) | ) | Yes | No | total : , auxiliary : ) |
Odd-Even Sort
์ปดํจํ
์์คํ
๊ด์ ์์ ํ์ง ์ ๋ ฌ์ ์๋ ์ํธ ๋ก์ปฌ ์ฐ๊ฒฐ์ ๋ณ๋ ฌ ํ๋ก์ธ์์์ ์ฌ์ฉํ๊ธฐ ์ํด ๊ฐ๋ฐ๋ ๋น๊ต์ ๊ฐ๋จํ ์ ๋ ฌ ์๊ณ ๋ฆฌ์ฆ์
๋๋ค
COMPLEXITY
) | ) | ) | Yes | Yes | total : , auxiliary : ) |
Odd-Even Merge Sort
ํ์ง ๋ณํฉ ์ ๋ ฌ์ ์ฌ์ด์ฆ๋
, ๊น์ด๋
๋ฅผ ๊ฐ๋ ๋คํธ์ํฌ ์ ๋ ฌ์ ์ํด Ken Batcher ์ ๋ ฌ ์๊ณ ๋ฆฌ์ฆ ์
๋๋ค.
COMPLEXITY
non-parallel | ) | ) | ) | Yes | yes | total : , auxiliary : ) |
parallel | ) | ) | ) | Yes | yes | total : , auxiliary : ) |
Comb Sort
์ฝค ์ ๋ ฌ์ ์๋ 1980๋
Wลodzimierz Dobosiewicz์ Artur Borowy๊ฐ ์ค๊ณํ ๋น๊ต์ ๊ฐ๋จํ ์ ๋ ฌ ์๊ณ ๋ฆฌ์ฆ์ผ๋ก, ๋์ค์ Stephen Lacey์ Richard Box๊ฐ 1991๋
์ ์ฌ๋ฐ๊ฒฌ(์ด ๋ "Combsort"๋ผ๊ณ ์ด๋ฆ์ ์ง์ )ํ์ต๋๋ค. Comb ์ ๋ ฌ์ ์
ธ ์ ๋ ฌ๊ณผ ์ ์ฌํ ๋ฐฉ์์ผ๋ก ๋ฒ๋ธ ์ ๋ ฌ์ ๊ฐ์ ํ์ฌ ์ฑ๋ฅ์ ํฅ์ ์ํจ ์ ๋ ฌ ์๊ณ ๋ฆฌ์ฆ์
๋๋ค.
COMPLEXITY
) | ) | ) | Yes | No | total : , auxiliary : ) |