GoSortingAlgorithms

module
v1.0.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jun 14, 2023 License: Apache-2.0

README ΒΆ

ν•œκΈ€ λ¬Έμ„œ | English Document


GoSortingAlgorithms


Go μ–Έμ–΄λ‘œ μž‘μ„±λœ λ‹€μ–‘ν•œ μ •λ ¬ μ•Œκ³ λ¦¬μ¦˜λ“€μ΄ μžˆμŠ΅λ‹ˆλ‹€ :octocat:



πŸ”° μ„€μΉ˜ 방법

Go μ–Έμ–΄κ°€ μ„€μΉ˜ λ˜μ–΄ μžˆλ‹€λ©΄, go get λͺ…λ Ήμ–΄λ₯Ό μ‹€ν–‰ν•˜μ—¬ GoSoringAlgorithms νŒ¨ν‚€μ§€λ₯Ό λ°›μ•„μ˜΅λ‹ˆλ‹€.

$ go get github.com/kdgyun/GoSortingAlgorithms



πŸ“– μ‚¬μš© μ„€λͺ…μ„œ

κ°„λ‹¨ν•©λ‹ˆλ‹€!


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) // sorts.____(slice []int)

	isSorted := sort.SliceIsSorted(slice, func(i, j int) bool {
		return slice[i] < slice[j]
	})
	fmt.Print(isSorted)
}



πŸ§ͺ κ°„λ‹¨ν•œ ν…ŒμŠ€νŠΈ 방법

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κ°€μ§€ μ£Όμš” μ˜΅μ…˜μ„ μ œκ³΅ν•©λ‹ˆλ‹€.

  1. μ •λ ¬ μ•Œκ³ λ¦¬μ¦˜ 선택 νŠΉμ • μ •λ ¬ μ•Œκ³ λ¦¬μ¦˜λ§Œ ν…ŒμŠ€νŠΈ ν˜Ήμ€ μ œμ™Έν•˜κ³ μž ν•œλ‹€λ©΄ ν…ŒμŠ€νŠΈν•˜κ³ μž ν•˜λŠ” μ •λ ¬ μ•Œκ³ λ¦¬μ¦˜ 이름을 μ°Ύμ•„ λ³€μˆ˜λ₯Ό true λ˜λŠ” false둜 λ³€κ²½ν•©λ‹ˆλ‹€. (True : ν…ŒμŠ€νŠΈ ν—ˆμš©, false : ν…ŒμŠ€νŠΈ λΉ„ν—ˆμš©)

    ex) SHELL_SORT Activate = true

  2. ν…ŒμŠ€νŠΈ ν•  슬라이슀의 길이 λ³€κ²½. ν…ŒμŠ€νŠΈν•  슬라이슀의 길이λ₯Ό λ³€κ²½ν•˜λ €λ©΄ 'lengths' λ³€μˆ˜μ˜ 슬라이슀λ₯Ό μ›ν•˜λŠ” κ°’μœΌλ‘œ μ„€μ • ν•  수 μžˆμŠ΅λ‹ˆλ‹€. μ•„λž˜ μ˜ˆμ‹œλŠ” 길이 35, 50,000, 100,000 μŠ¬λΌμ΄μŠ€μ— λŒ€ν•΄ 각각 ν…ŒμŠ€νŠΈ ν•˜κ²Œ λ©λ‹ˆλ‹€.

    ex) var lengths = [...]int{35, 50000, 100000}

  3. 슬라이슀 μœ ν˜• λ³€κ²½.
    기본적으둜 μ˜€λ¦„μ°¨μˆœ, λ‚΄λ¦Όμ°¨μˆœ 및 랜덀 λ°μ΄ν„°λ‘œ κ΅¬μ„±λœ 각각의 λͺ¨λ“  μŠ¬λΌμ΄μŠ€κ°€ ν…ŒμŠ€νŠΈλ©λ‹ˆλ‹€. κ·ΈλŸ¬λ‚˜ νŠΉμ • 데이터 μœ ν˜•μ„ λΉ„ν™œμ„±ν™”ν•˜λ €λ©΄ λ³€μˆ˜λ₯Ό false둜 λ³€κ²½ν•˜λ©΄ λ©λ‹ˆλ‹€.

    ex) ASCENDING_TEST Activate = false



πŸ”Ž κ°œμš”

Go μ–Έμ–΄λŠ” λ°°μ—΄κ³Ό μŠ¬λΌμ΄μŠ€κ°€ κ΅¬λΆ„λ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€. ν•˜μ§€λ§Œ, 일반적으둜 기타 μ–Έμ–΄μ—μ„œλ„ 배열이 μ΅μˆ™ν•˜κΈ° λ•Œλ¬Έμ— ν•΄λ‹Ή μ•Œκ³ λ¦¬μ¦˜μ„ μ„€λͺ… ν•  λ•Œμ—λŠ” λ°°μ—΄λ‘œ ν†΅μΌν•˜μ—¬ μ„€λͺ…ν•©λ‹ˆλ‹€.

ν˜„μž¬ μ—…λ°μ΄νŠΈ 된 μ •λ ¬ μ•Œκ³ λ¦¬μ¦˜:

name function name
Bubble Sort BubbleSort
Cocktail Sort CocktailSort
Insertion Sort InsertionSort
Selection Sort SelectionSort
Shell Sort ShellSort
Merge Sort (bottom-up) BottomUpMergeSort
Merge Sort (top-down) TopDownMergeSort
Merge Sort (parallel) ParallelMergeSort
Heap Sort HeapSort
Quick Sort (left-pivot) QuickSortLP
Quick Sort (middle-pivot) QuickSort
Quick Sort (left-pivot) QuickSortRP
Quick Sort (left-pivot with parallel) ParallelQuickSortLP
Quick Sort (middle-pivot with parallel) ParallelQuickSort
Quick Sort (left-pivot with parallel) ParallelQuickSortRP
Dual-pivot Quick Sort DualPivotQuickSort
Dual-pivot Quick Sort (parallel) ParallelDualPivotQuickSort
Binaray Insertion Sort BinarySort
Tim Sort TimSort
Bitonic Sort BitonicSort
Bitonic Sort (parallel) ParallelBitonicSort
Intro Sort IntroSort
Intro Sort (parallel) ParallelIntroSort
Cycle Sort CycleSort
Odd-Even Sort OddEvenSort
Odd-Even Merge Sort OddEvenMergeSort
Odd-Even Merge Sort (parallel) ParallelOddEvenMergeSort
Comb Sort CombSort


Bubble Sort


버블 정렬은 μΈμ ‘ν•œ μš”μ†Œλ₯Ό 반볡적으둜 λΉ„κ΅ν•˜κ³  κ΅ν™˜ν•˜λŠ” λ°©μ‹μž…λ‹ˆλ‹€. ν•΄λ‹Ή κ΅¬ν˜„μ€ 이미 배열이 μ •λ ¬λ˜μ–΄μžˆλŠ” 경우 정렬을 μ’…λ£Œν•˜λ„λ‘ μ΅œμ ν™”λ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€. μ΅œμ ν™”λ₯Ό μ›ν•˜μ§€ μ•ŠλŠ”λ‹€λ©΄, bubbleSort ν•¨μˆ˜μ—μ„œ swapped λ³€μˆ˜λ₯Ό μ‚­μ œ 및 ν•΄λ‹Ή 쑰건문을 μ‚­μ œν•˜λ©΄ λ©λ‹ˆλ‹€.
COMPLEXITY
Worst-Case Average-Case Best-Case in-place stable Space Complexity
O(n) or Yes Yes total : O(n), auxiliary : O(1)


Cocktail Sort


μΉ΅ν…ŒμΌ 정렬은 버블 정렬을 κΈ°λ°˜ν•œ λ³€ν˜• 된 μ•Œκ³ λ¦¬μ¦˜μž…λ‹ˆλ‹€. Cocktail shaker sort(μΉ΅ν…ŒμΌ 셰이컀 μ •λ ¬), bidirectional bubble sort(μ–‘λ°©ν–₯ 버블 μ •λ ¬), cocktail sort(μΉ΅ν…ŒμΌ μ •λ ¬), shaker sort(셰이컀 μ •λ ¬) 이라고도 λΆˆλ¦½λ‹ˆλ‹€.
COMPLEXITY
Worst-Case Average-Case Best-Case in-place stable Space Complexity
O(n) Yes Yes total : O(n), auxiliary : O(1)


Insertion Sort


μ‚½μž… 정렬은 각 λ°˜λ³΅λ§ˆλ‹€ λ°°μ—΄μ˜ μ•žμ—μ„œλΆ€ν„° μ°¨λ‘€λŒ€λ‘œ 이미 μ •λ ¬λœ λ°°μ—΄ λΆ€λΆ„κ³Ό λΉ„κ΅ν•˜μ—¬ μžμ‹ μ˜ μœ„μΉ˜λ₯Ό μ°Ύμ•„ μ‚½μž…μš”μ†Œλ₯Ό μ°Ύμ•„ μ˜¬λ°”λ₯Έ μœ„μΉ˜μ— λ°°μΉ˜ν•˜κ²Œ λ©λ‹ˆλ‹€.
COMPLEXITY
Worst-Case Average-Case Best-Case in-place stable Space Complexity
O(n) Yes Yes total : O(n), auxiliary : O(1)


Selection Sort


선택 정렬은 μ •λ ¬λ˜μ§€ μ•Šμ€ λΆ€λΆ„μ—μ„œ 각 λ°˜λ³΅μ„ 톡해 κ°€μž₯ μž‘μ€ μš”μ†Œλ₯Ό μ°Ύμ•„ μ•ž μœ„μΉ˜μ— λ°°μΉ˜ν•˜κ²Œ λ©λ‹ˆλ‹€.
COMPLEXITY
Worst-Case Average-Case Best-Case in-place stable Space Complexity
Yes No total : O(n), auxiliary : O(1)


Shell Sort


μ…Έ 정렬은 μ‚½μž… 정렬을 ν™•μž₯ν•œ λ²„μ „μž…λ‹ˆλ‹€. λ¨Όμ € 일정 κ°„κ²©μœΌλ‘œ μ„œλ‘œ 멀리 λ–¨μ–΄μ Έ μžˆλŠ” μš”μ†Œλ₯Ό μ‚½μž… μ •λ ¬ν•΄ λ‚˜κ°€λ©΄μ„œ λ‹€μŒμ—λŠ” κ·Έ μ‚¬μ΄μ˜ 간격을 μ€„μ—¬λ‚˜κ°€λ©΄μ„œ μ •λ ¬ν•˜κ²Œ λ©λ‹ˆλ‹€.

*적용 된 Gap μ‹œν€€μŠ€λŠ” λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€. Ciura sequence

COMPLEXITY
Worst-Case Average-Case Best-Case in-place stable Space Complexity
or depends on gap sequence O(nlog_n) or Yes No total : O(n), auxiliary : O(1)


Merge Sort


병합 정렬은 λΆ„ν•  정볡 μ•Œκ³ λ¦¬μ¦˜μ„ 기반으둜 ν•©λ‹ˆλ‹€.

κ°œλ…μ μœΌλ‘œ 병합 정렬은 λ‹€μŒκ³Ό 같이 μž‘λ™ν•©λ‹ˆλ‹€:

  1. μ •λ ¬λ˜μ§€ μ•Šμ€ n개의 μš”μ†Œλ₯Ό κ°–λŠ” 배열을 μž¬κ·€μ μœΌλ‘œ μ΅œμ†Œ ν•˜λ‚˜ μ΄μƒμ˜ μš”μ†Œλ₯Ό ν¬ν•¨ν•˜λŠ” 배열이 λ˜λ„λ‘ 절반으둜 λ‚˜λˆ•λ‹ˆλ‹€(μš”μ†Œκ°€ ν•œ 개만 μžˆλŠ” 배열은 μ •λ ¬λœ κ²ƒμœΌλ‘œ κ°„μ£Όλ©λ‹ˆλ‹€).
  2. λΆ„ν•  된 배열이 λͺ¨λ‘ ν•©μ³μ§ˆ λ•Œ κΉŒμ§€ 반볡적으둜 λ³‘ν•©ν•˜μ—¬ μ •λ ¬ ν•©λ‹ˆλ‹€.


3κ°€μ§€ μœ ν˜•μ˜ 병합 정렬을 μ§€μ›ν•©λ‹ˆλ‹€.

  • top-down
    ν•˜ν–₯식 병합 μ •λ ¬ μ•Œκ³ λ¦¬μ¦˜μ€ λΆ„ν•  된 λ°°μ—΄μ˜ 크기가 1이 될 λ•ŒκΉŒμ§€ 배열을 μž¬κ·€μ μœΌλ‘œ λΆ„ν• ν•œ λ‹€μŒ ν•΄λ‹Ή ν•˜μœ„ 배열듀을 λ³‘ν•©ν•˜μ—¬ μ •λ ¬λœ λͺ©λ‘μ„ μƒμ„±ν•©λ‹ˆλ‹€.
  • bottom-up
    상ν–₯식 병합 μ •λ ¬ μ•Œκ³ λ¦¬μ¦˜μ€ 크기가 1인 n개의 ν•˜μœ„ 배열을 두 버퍼 μ‚¬μ΄μ—μ„œ μ•ž λ’€λ‘œ ν•˜μœ„ 배열듀을 반볡적으둜 λ³‘ν•©ν•©λ‹ˆλ‹€.
  • parallel
    병렬 병합 μ •λ ¬ μ•Œκ³ λ¦¬μ¦˜μ€ μž¬κ·€ 호좜의 병렬화λ₯Ό 톡해 ν•˜μœ„ λ°°μ—΄μ˜ 크기가 μž„κ³„κ°’λ³΄λ‹€ μž‘μ•„μ§ˆ λ•ŒκΉŒμ§€ 배열을 μž¬κ·€μ μœΌλ‘œ λΆ„ν• ν•œ λ‹€μŒ λ³‘ν•©ν•˜λŠ” ν•˜ν–₯식 정렬을 μˆ˜ν–‰ν•©λ‹ˆλ‹€. 이 λ•Œ, μž„κ³„κ°’λ³΄λ‹€ μž‘μ€ ν•˜μœ„ 배열듀은 상ν–₯식 정렬을 μ‚¬μš©ν•˜μ—¬ μ •λ ¬ν•˜κ²Œ λ©λ‹ˆλ‹€.

COMPLEXITY
Worst-Case Average-Case Best-Case in-place stable Space Complexity
O(nlog_n) O(nlog_n) O(nlog_n) No Yes total : O(n), auxiliary : O(n)


Heap Sort


νž™ 정렬은 배열을 νž™μ˜ μ›λ¦¬μ²˜λŸΌ λ°°μ—΄μ—μ„œ μš”μ†Œλ₯Ό ν•˜λ‚˜μ”© μ œκ±°ν•œ λ‹€μŒ λ°°μ—΄μ˜ μ •λ ¬λœ 뢀뢄에 μ‚½μž…ν•˜μ—¬ μ •λ ¬ν•˜κ²Œ λ©λ‹ˆλ‹€.
COMPLEXITY
Worst-Case Average-Case Best-Case in-place stable Space Complexity
O(nlog_n) O(nlog_n) O(nlog_n) Yes No total : O(n), auxiliary : O(1)


Quick Sort


퀡 정렬은 λ°°μ—΄μ—μ„œ νŠΉμ • 피벗을 μ„ νƒν•œ λ‹€μŒ 피벗보닀 μž‘μ€μ§€ 큰지에 따라 λ‹€λ₯Έ μš”μ†Œλ₯Ό 두 개의 ν•˜μœ„ λ°°μ—΄λ‘œ λΆ„ν• ν•˜κ²Œ λ˜λŠ” λΆ„ν•  정볡 μ•Œκ³ λ¦¬μ¦˜μ„ 기반으둜 ν•©λ‹ˆλ‹€. μž¬κ·€μ μœΌλ‘œ 이 과정을 거쳐 μ •λ ¬λ©λ‹ˆλ‹€.

3κ°€μ§€ μœ ν˜•μ˜ 퀡 정렬을 μ§€μ›ν•©λ‹ˆλ‹€.

  • left-pivot (+parallel)
    μ™Όμͺ½ ν”Όλ²— 퀡 정렬은 μ™Όμͺ½ μš”μ†Œλ₯Ό ν”Όλ²—μœΌλ‘œ μ„ νƒν•˜μ—¬ μ •λ ¬ν•©λ‹ˆλ‹€.
  • middle-pivot (+parallel)
    쀑간 ν”Όλ²— 퀡 정렬은 쀑간 μš”μ†Œλ₯Ό ν”Όλ²—μœΌλ‘œ μ„ νƒν•˜μ—¬ μ •λ ¬ν•©λ‹ˆλ‹€.
  • right-pivot (+parallel)
    였λ₯Έμͺ½ ν”Όλ²— 퀡 정렬은 였λ₯Έμͺ½ μš”μ†Œλ₯Ό ν”Όλ²—μœΌλ‘œ μ„ νƒν•˜μ—¬ μ •λ ¬ν•©λ‹ˆλ‹€.

λ˜ν•œ 각 μ•Œκ³ λ¦¬μ¦˜μ€ μž¬κ·€ 호좜의 병렬화도 μ§€μ›ν•©λ‹ˆλ‹€.

COMPLEXITY
Worst-Case Average-Case Best-Case in-place stable Space Complexity
O(nlog_n) O(nlog_n) Yes No total : O(n), auxiliary : O(log_n)


Dual-Pivot Quick Sort


이쀑 ν”Όλ²— 퀡 정렬은 Quick Sortλ₯Ό 기반으둜 ν•˜μ§€λ§Œ, λ°°μ—΄μ—μ„œ 두 개의 μš”μ†Œλ₯Ό ν”Όλ²—(pivot)으둜 μ„ νƒν•˜μ—¬ μ •λ ¬ν•˜λŠ” 방식에 차이가 μžˆμŠ΅λ‹ˆλ‹€. μ •λ ¬ν•  λ°°μ—΄μ—μ„œ 두 개의 μš”μ†Œ(ν”Όλ²—)λ₯Ό μ„ νƒν•˜κ³  λ‚˜λ¨Έμ§€ μš”μ†Œλ“€μ„ μž‘μ€ ν”Όλ²—(small pivot)보닀 μž‘μ€ μš”μ†Œ, ν”Όλ²— 사이에 μžˆλŠ” μš”μ†Œ, 큰 ν”Όλ²—(big pivot)보닀 큰 μš”μ†Œλ‘œ κ΅¬λΆ„ν•˜μ—¬ 배열을 λΆ„ν• ν•˜κ³  μ΄λŸ¬ν•œ νŒŒν‹°μ…˜μ„ μž¬κ·€μ μΈ 과정을 톡해 μ •λ ¬ν•˜κ²Œ λ©λ‹ˆλ‹€.

2κ°€μ§€ μœ ν˜•μ˜ 이쀑 ν”Όλ²— 퀡 정렬을 μ§€μ›ν•©λ‹ˆλ‹€.

  • non-parallel
    μ •λ ¬ν•  λ°°μ—΄μ—μ„œ 두 개의 μš”μ†Œ(ν”Όλ²—)λ₯Ό μ„ νƒν•˜κ³  λ‚˜λ¨Έμ§€ μš”μ†Œλ“€μ„ μž‘μ€ ν”Όλ²—(small pivot)보닀 μž‘μ€ μš”μ†Œ, ν”Όλ²— 사이에 μžˆλŠ” μš”μ†Œ, 큰 ν”Όλ²—(big pivot)보닀 큰 μš”μ†Œλ‘œ κ΅¬λΆ„ν•˜μ—¬ 배열을 λΆ„ν• ν•˜κ³  μ΄λŸ¬ν•œ νŒŒν‹°μ…˜μ„ μž¬κ·€μ μΈ 과정을 톡해 μ •λ ¬ν•˜κ²Œ λ©λ‹ˆλ‹€.
  • parallel
    μž¬κ·€ 호좜의 병렬화λ₯Ό 톡해 각각의 μ •λ ¬ μ•Œκ³ λ¦¬μ¦˜μ€ λΆ„ν•  된 λ°°μ—΄μ˜ 크기가 μž„κ³„κ°’λ³΄λ‹€ μž‘μ„ λ•ŒκΉŒμ§€ 배열을 μž¬κ·€μ μœΌλ‘œ λΆ„ν• ν•œ 배열을 λ³‘ν•©ν•˜μ—¬ μ •λ ¬ν•˜κ²Œ λ©λ‹ˆλ‹€.

COMPLEXITY
Worst-Case Average-Case Best-Case in-place stable Space Complexity
O(nlog_n) O(nlog_n) Yes No total : O(n), auxiliary : O(log_n)


Binary Insertion Sort


이진 μ‚½μž… 정렬은 μ‚½μž… 정렬을 기반으둜 ν•œ ν™•μž₯ λ²„μ „μž…λ‹ˆλ‹€. 이진 정렬이라고도 ν•©λ‹ˆλ‹€. 이진 μ‚½μž… 정렬은 이진 검색(Binary Search)을 μ‚¬μš©ν•˜μ—¬ 각 반볡 κ³Όμ •μ—μ„œ νŠΉμ • μš”μ†Œλ₯Ό μ‚½μž…ν•  μœ„μΉ˜λ₯Ό μ°Ύμ•„ μ‚½μž…ν•˜κ²Œ λ©λ‹ˆλ‹€.
COMPLEXITY
Worst-Case Average-Case Best-Case in-place stable Space Complexity
O(n) Yes yes total : O(n), auxiliary : O(1)


Tim Sort


TimsortλŠ” λ‹€μ–‘ν•œ μ’…λ₯˜μ˜ μ‹€μ œ λ°μ΄ν„°μ—μ„œ 잘 μˆ˜ν–‰λ˜λ„λ‘ μ„€κ³„λœ μ•Œκ³ λ¦¬μ¦˜μœΌλ‘œ, 병합 μ •λ ¬κ³Ό μ‚½μž… μ •λ ¬(λ˜λŠ” 이진 μ‚½μž… μ •λ ¬)μ—μ„œ νŒŒμƒλ˜μ–΄ ν˜Όν•© 된 μ•ˆμ •μ μΈ ν•˜μ΄λΈŒλ¦¬λ“œ μ •λ ¬ μ•Œκ³ λ¦¬μ¦˜ μž…λ‹ˆλ‹€. Python ν”„λ‘œκ·Έλž˜λ° μ–Έμ–΄μ—μ„œ μ‚¬μš©ν•˜κΈ° μœ„ν•΄ 2002λ…„ Tim Peters에 μ˜ν•΄ κ΅¬ν˜„λ˜μ—ˆμŠ΅λ‹ˆλ‹€.

COMPLEXITY
Worst-Case Average-Case Best-Case in-place stable Space Complexity
O(nlog_n) O(nlog_n) O(n) Yes yes total : O(n), auxiliary : O(n)


Bitonic Sort


바이토닉 정렬은 λ³‘λ ¬λ‘œ μ‹€ν–‰ν•  수 μžˆλŠ” 비ꡐ 기반 μ •λ ¬ μ•Œκ³ λ¦¬μ¦˜μž…λ‹ˆλ‹€. λ¬΄μž‘μœ„ 숫자 μ‹œν€€μŠ€λ₯Ό 단쑰 μ¦κ°€ν–ˆλ‹€κ°€ κ°μ†Œν•˜λŠ” λΉ„νŠΈ μ‹œν€€μŠ€λ‘œ λ³€ν™˜ν•˜λŠ” 데 쀑점을 λ‘‘λ‹ˆλ‹€. 병렬 ν™˜κ²½μ— μ΅œμ ν™” λ˜μ–΄μžˆμœΌλ©° GPU 병렬 처리둜 μ‚¬μš©λ˜κΈ°λ„ ν•˜μ§€λ§Œ, μ—¬κΈ°μ„œλŠ” 기타 λ³‘λ ¬ν™”ν•œ μ •λ ¬ μ•Œκ³ λ¦¬μ¦˜λ“€κ³Ό λ§ˆμ°¬κ°€μ§€λ‘œ GO μ–Έμ–΄μ˜ λ™μ‹œμ„± λͺ¨λΈλ‘œ κ΅¬ν˜„λ©λ‹ˆλ‹€.

2κ°€μ§€ μœ ν˜•μ˜ μ•Œκ³ λ¦¬μ¦˜μ„ μ§€μ›ν•©λ‹ˆλ‹€.

  • non-parallel
    λΆ„ν•  된 λ°°μ—΄μ˜ 크기가 1이 될 λ•ŒκΉŒμ§€ 배열을 μž¬κ·€μ μœΌλ‘œ λΆ„ν• ν•œ λ‹€μŒ Bitonic Sequencing Rule에 따라 ν•΄λ‹Ή ν•˜μœ„ 배열을 λ³‘ν•©ν•˜μ—¬ μ •λ ¬ν•˜κ²Œ λ©λ‹ˆλ‹€.
  • parallel
    μž¬κ·€ 호좜의 병렬화λ₯Ό 톡해 λΆ„ν•  된 λ°°μ—΄μ˜ 크기가 μž„κ³„κ°’λ³΄λ‹€ μž‘μ•„μ§ˆ λ•ŒκΉŒμ§€ 배열을 μž¬κ·€μ μœΌλ‘œ λΆ„ν• ν•œ λ‹€μŒ λΉ„λ³‘λ ¬ν™”λ‘œ μ „ν™˜ν•˜μ—¬ Bitonic Sequencing Rule에 따라 ν•˜μœ„ 배열을 λΆ„ν•  및 λ³‘ν•©ν•˜μ—¬ μƒμ„±ν•©λ‹ˆλ‹€.

COMPLEXITY
Type Worst-Case Average-Case Best-Case in-place stable Space Complexity
non-parallel Yes No total : , auxiliary :
parallel Yes No total : , auxiliary :


Intro Sort


인트둜 정렬은 μ΅œμ•…μ˜ κ²½μš°μ—λ„ ν‰κ· μ μœΌλ‘œ λΉ λ₯Έ μ„±λŠ₯κ³Ό 및 (점근적으둜) μ΅œμ ν™” 된 ν•˜μ΄λΈŒλ¦¬λ“œ μ •λ ¬ μ•Œκ³ λ¦¬μ¦˜μž…λ‹ˆλ‹€. ν€΅μ •λ ¬λ‘œ μ‹œμž‘ν•˜μ—¬ μž¬κ·€ κΉŠμ΄κ°€ μ •λ ¬λ˜λŠ” λ°°μ—΄μ˜ μš”μ†Œ κ°œμˆ˜μ— λ”°λ₯Έ 깊이 μž„κ³„κ°’(maximum depth: 2ceil(log2_n) ) μˆ˜μ€€μ„ μ΄ˆκ³Όν•˜λ©΄ νž™ μ •λ ¬λ‘œ μ „ν™˜ν•˜κ³  λΆ„ν•  된 λ°°μ—΄μ˜ μš”μ†Œ κ°œμˆ˜κ°€ 길이 μž„κ³„κ°’(16) 미만이면 μ‚½μž… μ •λ ¬λ‘œ μ „ν™˜ν•©λ‹ˆλ‹€.



2κ°€μ§€ μœ ν˜•μ˜ μ•Œκ³ λ¦¬μ¦˜μ„ μ§€μ›ν•©λ‹ˆλ‹€.

  • non-parallel
    μ •λ ¬ν•  λ°°μ—΄μ—μ„œ 퀡 정렬을 μ‚¬μš©ν•  λ•Œ μš”μ†Œ(ν”Όλ²—)λ₯Ό μ„ νƒν•˜κ³  선택 된 피벗을 μ œμ™Έν•œ λ‹€λ₯Έ μš”μ†Œλ“€μ΄ 피벗보닀 μž‘κ±°λ‚˜ 큰지 여뢀에 따라 두 개의 ν•˜μœ„ λ°°μ—΄λ‘œ λΆ„ν• ν•˜κ³  μž¬κ·€ κΉŠμ΄κ°€ νŠΉμ • μž„κ³„κ°’(maximum depth: 2ceil(log2_n) )을 λ„˜κΈ° μ „κΉŒμ§€ μ΄λŸ¬ν•œ 과정을 μž¬κ·€μ μœΌλ‘œ κ±°μΉ©λ‹ˆλ‹€.

  • parallel
    μž¬κ·€ 호좜의 병렬화λ₯Ό 톡해 각 병렬화 된 이쀑 ν”Όλ²— 퀡 μ •λ ¬ μ•Œκ³ λ¦¬μ¦˜μ€ λΆ„ν•  된 λ°°μ—΄μ˜ 크기가 μž„κ³„κ°’λ³΄λ‹€ μž‘μ•„μ§€κΈ° μ „κΉŒμ§€ 배열을 μž¬κ·€μ μœΌλ‘œ λΆ„ν• ν•˜μ—¬ μ •λ ¬ν•©λ‹ˆλ‹€.


COMPLEXITY
Worst-Case Average-Case Best-Case in-place stable Space Complexity
O(nlog_n) O(nlog_n) O(nlog_n) Yes No total : O(n), auxiliary : O(log_n)


Cycle Sort


μˆœν™˜ 정렬은 in-place μ •λ ¬μ΄μž λΆˆμ•ˆμ • μ •λ ¬ μ•Œκ³ λ¦¬μ¦˜μœΌλ‘œ, 배열에 λŒ€ν•΄ 총 μ“°κΈ°(write) 수의 κ΄€μ μ—μ„œ κ°€μž₯ 적게 μ“°κΈ° μœ„ν•œ 비ꡐ μ •λ ¬ μ•Œκ³ λ¦¬μ¦˜ μž…λ‹ˆλ‹€.
COMPLEXITY
Worst-Case Average-Case Best-Case in-place stable Space Complexity
Yes No total : O(n), auxiliary : O(1)


Odd-Even Sort


μ»΄ν“¨νŒ… μ‹œμŠ€ν…œ κ΄€μ μ—μ„œ 홀짝 정렬은 μ›λž˜ μƒν˜Έ 둜컬 μ—°κ²°μ˜ 병렬 ν”„λ‘œμ„Έμ„œμ—μ„œ μ‚¬μš©ν•˜κΈ° μœ„ν•΄ 개발된 비ꡐ적 κ°„λ‹¨ν•œ μ •λ ¬ μ•Œκ³ λ¦¬μ¦˜μž…λ‹ˆλ‹€
COMPLEXITY
Worst-Case Average-Case Best-Case in-place stable Space Complexity
Yes Yes total : O(n), auxiliary : O(1)


Odd-Even Merge Sort


홀짝 병합 정렬은 μ‚¬μ΄μ¦ˆλŠ” , κΉŠμ΄λŠ” λ₯Ό κ°–λŠ” λ„€νŠΈμ›Œν¬ 정렬을 μœ„ν•΄ Ken Batcher μ •λ ¬ μ•Œκ³ λ¦¬μ¦˜ μž…λ‹ˆλ‹€.


COMPLEXITY
Type Worst-Case Average-Case Best-Case in-place stable Space 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
Worst-Case Average-Case Best-Case in-place stable Space Complexity
O(nlog_n) Yes No total : O(n), auxiliary : O(1)

Directories ΒΆ

Path Synopsis
author : kdgyun
author : kdgyun

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL