๐Ÿš€ Big News: Socket Acquires Coana to Bring Reachability Analysis to Every Appsec Team.Learn more โ†’
Socket
Sign inDemoInstall
Socket

github.com/kdgyun/gosortingalgorithms

Package Overview
Dependencies
Alerts
File Explorer
Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

github.com/kdgyun/gosortingalgorithms

v1.0.0
Source
Go
Version published
Created
Source

ํ•œ๊ธ€ ๋ฌธ์„œ | 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) // sorts.____(slice []int)

	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 ์–ธ์–ด๋Š” ๋ฐฐ์—ด๊ณผ ์Šฌ๋ผ์ด์Šค๊ฐ€ ๊ตฌ๋ถ„๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ, ์ผ๋ฐ˜์ ์œผ๋กœ ๊ธฐํƒ€ ์–ธ์–ด์—์„œ๋„ ๋ฐฐ์—ด์ด ์ต์ˆ™ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ํ•ด๋‹น ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์„ค๋ช… ํ•  ๋•Œ์—๋Š” ๋ฐฐ์—ด๋กœ ํ†ต์ผํ•˜์—ฌ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค.

ํ˜„์žฌ ์—…๋ฐ์ดํŠธ ๋œ ์ •๋ ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜:

namefunction name
Bubble SortBubbleSort
Cocktail SortCocktailSort
Insertion SortInsertionSort
Selection SortSelectionSort
Shell SortShellSort
Merge Sort (bottom-up)BottomUpMergeSort
Merge Sort (top-down)TopDownMergeSort
Merge Sort (parallel)ParallelMergeSort
Heap SortHeapSort
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 SortDualPivotQuickSort
Dual-pivot Quick Sort (parallel)ParallelDualPivotQuickSort
Binaray Insertion SortBinarySort
Tim SortTimSort
Bitonic SortBitonicSort
Bitonic Sort (parallel)ParallelBitonicSort
Intro SortIntroSort
Intro Sort (parallel)ParallelIntroSort
Cycle SortCycleSort
Odd-Even SortOddEvenSort
Odd-Even Merge SortOddEvenMergeSort
Odd-Even Merge Sort (parallel)ParallelOddEvenMergeSort
Comb SortCombSort


Bubble Sort


๋ฒ„๋ธ” ์ •๋ ฌ์€ ์ธ์ ‘ํ•œ ์š”์†Œ๋ฅผ ๋ฐ˜๋ณต์ ์œผ๋กœ ๋น„๊ตํ•˜๊ณ  ๊ตํ™˜ํ•˜๋Š” ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค. ํ•ด๋‹น ๊ตฌํ˜„์€ ์ด๋ฏธ ๋ฐฐ์—ด์ด ์ •๋ ฌ๋˜์–ด์žˆ๋Š” ๊ฒฝ์šฐ ์ •๋ ฌ์„ ์ข…๋ฃŒํ•˜๋„๋ก ์ตœ์ ํ™”๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ตœ์ ํ™”๋ฅผ ์›ํ•˜์ง€ ์•Š๋Š”๋‹ค๋ฉด, bubbleSort ํ•จ์ˆ˜์—์„œ swapped ๋ณ€์ˆ˜๋ฅผ ์‚ญ์ œ ๋ฐ ํ•ด๋‹น ์กฐ๊ฑด๋ฌธ์„ ์‚ญ์ œํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.

COMPLEXITY

Worst-CaseAverage-CaseBest-Casein-placestableSpace Complexity
O(n^2)O(n^2)O(n) or O(n^2)YesYestotal : O(n), auxiliary : O(1)


Cocktail Sort


์นตํ…Œ์ผ ์ •๋ ฌ์€ ๋ฒ„๋ธ” ์ •๋ ฌ์„ ๊ธฐ๋ฐ˜ํ•œ ๋ณ€ํ˜• ๋œ ์•Œ๊ณ ๋ฆฌ์ฆ˜์ž…๋‹ˆ๋‹ค. Cocktail shaker sort(์นตํ…Œ์ผ ์…ฐ์ด์ปค ์ •๋ ฌ), bidirectional bubble sort(์–‘๋ฐฉํ–ฅ ๋ฒ„๋ธ” ์ •๋ ฌ), cocktail sort(์นตํ…Œ์ผ ์ •๋ ฌ), shaker sort(์…ฐ์ด์ปค ์ •๋ ฌ) ์ด๋ผ๊ณ ๋„ ๋ถˆ๋ฆฝ๋‹ˆ๋‹ค.

COMPLEXITY

Worst-CaseAverage-CaseBest-Casein-placestableSpace Complexity
O(n^2)O(n^2)O(n)YesYestotal : O(n), auxiliary : O(1)


Insertion Sort


์‚ฝ์ž… ์ •๋ ฌ์€ ๊ฐ ๋ฐ˜๋ณต๋งˆ๋‹ค ๋ฐฐ์—ด์˜ ์•ž์—์„œ๋ถ€ํ„ฐ ์ฐจ๋ก€๋Œ€๋กœ ์ด๋ฏธ ์ •๋ ฌ๋œ ๋ฐฐ์—ด ๋ถ€๋ถ„๊ณผ ๋น„๊ตํ•˜์—ฌ ์ž์‹ ์˜ ์œ„์น˜๋ฅผ ์ฐพ์•„ ์‚ฝ์ž…์š”์†Œ๋ฅผ ์ฐพ์•„ ์˜ฌ๋ฐ”๋ฅธ ์œ„์น˜์— ๋ฐฐ์น˜ํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

COMPLEXITY

Worst-CaseAverage-CaseBest-Casein-placestableSpace Complexity
O(n^2)O(n^2)O(n)YesYestotal : O(n), auxiliary : O(1)


Selection Sort


์„ ํƒ ์ •๋ ฌ์€ ์ •๋ ฌ๋˜์ง€ ์•Š์€ ๋ถ€๋ถ„์—์„œ ๊ฐ ๋ฐ˜๋ณต์„ ํ†ตํ•ด ๊ฐ€์žฅ ์ž‘์€ ์š”์†Œ๋ฅผ ์ฐพ์•„ ์•ž ์œ„์น˜์— ๋ฐฐ์น˜ํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

COMPLEXITY

Worst-CaseAverage-CaseBest-Casein-placestableSpace Complexity
O(n^2)O(n^2)O(n^2)YesNototal : O(n), auxiliary : O(1)


Shell Sort


์…ธ ์ •๋ ฌ์€ ์‚ฝ์ž… ์ •๋ ฌ์„ ํ™•์žฅํ•œ ๋ฒ„์ „์ž…๋‹ˆ๋‹ค. ๋จผ์ € ์ผ์ • ๊ฐ„๊ฒฉ์œผ๋กœ ์„œ๋กœ ๋ฉ€๋ฆฌ ๋–จ์–ด์ ธ ์žˆ๋Š” ์š”์†Œ๋ฅผ ์‚ฝ์ž… ์ •๋ ฌํ•ด ๋‚˜๊ฐ€๋ฉด์„œ ๋‹ค์Œ์—๋Š” ๊ทธ ์‚ฌ์ด์˜ ๊ฐ„๊ฒฉ์„ ์ค„์—ฌ๋‚˜๊ฐ€๋ฉด์„œ ์ •๋ ฌํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

*์ ์šฉ ๋œ Gap ์‹œํ€€์Šค๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค. Ciura sequence

COMPLEXITY

Worst-CaseAverage-CaseBest-Casein-placestableSpace Complexity
O(n^2) or O(nlog^2_n)depends on gap sequenceO(nlog_n) or O(nlog^2_n)YesNototal : O(n), auxiliary : O(1)


Merge Sort


๋ณ‘ํ•ฉ ์ •๋ ฌ์€ ๋ถ„ํ•  ์ •๋ณต ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•ฉ๋‹ˆ๋‹ค.

๊ฐœ๋…์ ์œผ๋กœ ๋ณ‘ํ•ฉ ์ •๋ ฌ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค:

  • ์ •๋ ฌ๋˜์ง€ ์•Š์€ n๊ฐœ์˜ ์š”์†Œ๋ฅผ ๊ฐ–๋Š” ๋ฐฐ์—ด์„ ์žฌ๊ท€์ ์œผ๋กœ ์ตœ์†Œ ํ•˜๋‚˜ ์ด์ƒ์˜ ์š”์†Œ๋ฅผ ํฌํ•จํ•˜๋Š” ๋ฐฐ์—ด์ด ๋˜๋„๋ก ์ ˆ๋ฐ˜์œผ๋กœ ๋‚˜๋ˆ•๋‹ˆ๋‹ค(์š”์†Œ๊ฐ€ ํ•œ ๊ฐœ๋งŒ ์žˆ๋Š” ๋ฐฐ์—ด์€ ์ •๋ ฌ๋œ ๊ฒƒ์œผ๋กœ ๊ฐ„์ฃผ๋ฉ๋‹ˆ๋‹ค).
  • ๋ถ„ํ•  ๋œ ๋ฐฐ์—ด์ด ๋ชจ๋‘ ํ•ฉ์ณ์งˆ ๋•Œ ๊นŒ์ง€ ๋ฐ˜๋ณต์ ์œผ๋กœ ๋ณ‘ํ•ฉํ•˜์—ฌ ์ •๋ ฌ ํ•ฉ๋‹ˆ๋‹ค.


3๊ฐ€์ง€ ์œ ํ˜•์˜ ๋ณ‘ํ•ฉ ์ •๋ ฌ์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.

  • top-down
    ํ•˜ํ–ฅ์‹ ๋ณ‘ํ•ฉ ์ •๋ ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ๋ถ„ํ•  ๋œ ๋ฐฐ์—ด์˜ ํฌ๊ธฐ๊ฐ€ 1์ด ๋  ๋•Œ๊นŒ์ง€ ๋ฐฐ์—ด์„ ์žฌ๊ท€์ ์œผ๋กœ ๋ถ„ํ• ํ•œ ๋‹ค์Œ ํ•ด๋‹น ํ•˜์œ„ ๋ฐฐ์—ด๋“ค์„ ๋ณ‘ํ•ฉํ•˜์—ฌ ์ •๋ ฌ๋œ ๋ชฉ๋ก์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.
  • bottom-up
    ์ƒํ–ฅ์‹ ๋ณ‘ํ•ฉ ์ •๋ ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ํฌ๊ธฐ๊ฐ€ 1์ธ n๊ฐœ์˜ ํ•˜์œ„ ๋ฐฐ์—ด์„ ๋‘ ๋ฒ„ํผ ์‚ฌ์ด์—์„œ ์•ž ๋’ค๋กœ ํ•˜์œ„ ๋ฐฐ์—ด๋“ค์„ ๋ฐ˜๋ณต์ ์œผ๋กœ ๋ณ‘ํ•ฉํ•ฉ๋‹ˆ๋‹ค.
  • parallel
    ๋ณ‘๋ ฌ ๋ณ‘ํ•ฉ ์ •๋ ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ์žฌ๊ท€ ํ˜ธ์ถœ์˜ ๋ณ‘๋ ฌํ™”๋ฅผ ํ†ตํ•ด ํ•˜์œ„ ๋ฐฐ์—ด์˜ ํฌ๊ธฐ๊ฐ€ ์ž„๊ณ„๊ฐ’๋ณด๋‹ค ์ž‘์•„์งˆ ๋•Œ๊นŒ์ง€ ๋ฐฐ์—ด์„ ์žฌ๊ท€์ ์œผ๋กœ ๋ถ„ํ• ํ•œ ๋‹ค์Œ ๋ณ‘ํ•ฉํ•˜๋Š” ํ•˜ํ–ฅ์‹ ์ •๋ ฌ์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค. ์ด ๋•Œ, ์ž„๊ณ„๊ฐ’๋ณด๋‹ค ์ž‘์€ ํ•˜์œ„ ๋ฐฐ์—ด๋“ค์€ ์ƒํ–ฅ์‹ ์ •๋ ฌ์„ ์‚ฌ์šฉํ•˜์—ฌ ์ •๋ ฌํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

COMPLEXITY

Worst-CaseAverage-CaseBest-Casein-placestableSpace Complexity
O(nlog_n)O(nlog_n)O(nlog_n)NoYestotal : O(n), auxiliary : O(n)


Heap Sort


ํž™ ์ •๋ ฌ์€ ๋ฐฐ์—ด์„ ํž™์˜ ์›๋ฆฌ์ฒ˜๋Ÿผ ๋ฐฐ์—ด์—์„œ ์š”์†Œ๋ฅผ ํ•˜๋‚˜์”ฉ ์ œ๊ฑฐํ•œ ๋‹ค์Œ ๋ฐฐ์—ด์˜ ์ •๋ ฌ๋œ ๋ถ€๋ถ„์— ์‚ฝ์ž…ํ•˜์—ฌ ์ •๋ ฌํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

COMPLEXITY

Worst-CaseAverage-CaseBest-Casein-placestableSpace Complexity
O(nlog_n)O(nlog_n)O(nlog_n)YesNototal : O(n), auxiliary : O(1)


Quick Sort


ํ€ต ์ •๋ ฌ์€ ๋ฐฐ์—ด์—์„œ ํŠน์ • ํ”ผ๋ฒ—์„ ์„ ํƒํ•œ ๋‹ค์Œ ํ”ผ๋ฒ—๋ณด๋‹ค ์ž‘์€์ง€ ํฐ์ง€์— ๋”ฐ๋ผ ๋‹ค๋ฅธ ์š”์†Œ๋ฅผ ๋‘ ๊ฐœ์˜ ํ•˜์œ„ ๋ฐฐ์—ด๋กœ ๋ถ„ํ• ํ•˜๊ฒŒ ๋˜๋Š” ๋ถ„ํ•  ์ •๋ณต ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•ฉ๋‹ˆ๋‹ค. ์žฌ๊ท€์ ์œผ๋กœ ์ด ๊ณผ์ •์„ ๊ฑฐ์ณ ์ •๋ ฌ๋ฉ๋‹ˆ๋‹ค.

3๊ฐ€์ง€ ์œ ํ˜•์˜ ํ€ต ์ •๋ ฌ์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.

  • left-pivot (+parallel)
    ์™ผ์ชฝ ํ”ผ๋ฒ— ํ€ต ์ •๋ ฌ์€ ์™ผ์ชฝ ์š”์†Œ๋ฅผ ํ”ผ๋ฒ—์œผ๋กœ ์„ ํƒํ•˜์—ฌ ์ •๋ ฌํ•ฉ๋‹ˆ๋‹ค.
  • middle-pivot (+parallel)
    ์ค‘๊ฐ„ ํ”ผ๋ฒ— ํ€ต ์ •๋ ฌ์€ ์ค‘๊ฐ„ ์š”์†Œ๋ฅผ ํ”ผ๋ฒ—์œผ๋กœ ์„ ํƒํ•˜์—ฌ ์ •๋ ฌํ•ฉ๋‹ˆ๋‹ค.
  • right-pivot (+parallel)
    ์˜ค๋ฅธ์ชฝ ํ”ผ๋ฒ— ํ€ต ์ •๋ ฌ์€ ์˜ค๋ฅธ์ชฝ ์š”์†Œ๋ฅผ ํ”ผ๋ฒ—์œผ๋กœ ์„ ํƒํ•˜์—ฌ ์ •๋ ฌํ•ฉ๋‹ˆ๋‹ค.

๋˜ํ•œ ๊ฐ ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ์žฌ๊ท€ ํ˜ธ์ถœ์˜ ๋ณ‘๋ ฌํ™”๋„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.

COMPLEXITY

Worst-CaseAverage-CaseBest-Casein-placestableSpace Complexity
O(n^2)O(nlog_n)O(nlog_n)YesNototal : 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-CaseAverage-CaseBest-Casein-placestableSpace Complexity
O(n^2)O(nlog_n)O(nlog_n)YesNototal : O(n), auxiliary : O(log_n)


Binary Insertion Sort


์ด์ง„ ์‚ฝ์ž… ์ •๋ ฌ์€ ์‚ฝ์ž… ์ •๋ ฌ์„ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•œ ํ™•์žฅ ๋ฒ„์ „์ž…๋‹ˆ๋‹ค. ์ด์ง„ ์ •๋ ฌ์ด๋ผ๊ณ ๋„ ํ•ฉ๋‹ˆ๋‹ค. ์ด์ง„ ์‚ฝ์ž… ์ •๋ ฌ์€ ์ด์ง„ ๊ฒ€์ƒ‰(Binary Search)์„ ์‚ฌ์šฉํ•˜์—ฌ ๊ฐ ๋ฐ˜๋ณต ๊ณผ์ •์—์„œ ํŠน์ • ์š”์†Œ๋ฅผ ์‚ฝ์ž…ํ•  ์œ„์น˜๋ฅผ ์ฐพ์•„ ์‚ฝ์ž…ํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

COMPLEXITY

Worst-CaseAverage-CaseBest-Casein-placestableSpace Complexity
O(n^2)O(n^2)O(n)Yesyestotal : O(n), auxiliary : O(1)


Tim Sort


Timsort๋Š” ๋‹ค์–‘ํ•œ ์ข…๋ฅ˜์˜ ์‹ค์ œ ๋ฐ์ดํ„ฐ์—์„œ ์ž˜ ์ˆ˜ํ–‰๋˜๋„๋ก ์„ค๊ณ„๋œ ์•Œ๊ณ ๋ฆฌ์ฆ˜์œผ๋กœ, ๋ณ‘ํ•ฉ ์ •๋ ฌ๊ณผ ์‚ฝ์ž… ์ •๋ ฌ(๋˜๋Š” ์ด์ง„ ์‚ฝ์ž… ์ •๋ ฌ)์—์„œ ํŒŒ์ƒ๋˜์–ด ํ˜ผํ•ฉ ๋œ ์•ˆ์ •์ ์ธ ํ•˜์ด๋ธŒ๋ฆฌ๋“œ ์ •๋ ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์ž…๋‹ˆ๋‹ค. Python ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด์—์„œ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด 2002๋…„ Tim Peters์— ์˜ํ•ด ๊ตฌํ˜„๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

COMPLEXITY

Worst-CaseAverage-CaseBest-Casein-placestableSpace Complexity
O(nlog_n)O(nlog_n)O(n)Yesyestotal : O(n), auxiliary : O(n)


Bitonic Sort


๋ฐ”์ดํ† ๋‹‰ ์ •๋ ฌ์€ ๋ณ‘๋ ฌ๋กœ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ๋น„๊ต ๊ธฐ๋ฐ˜ ์ •๋ ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜์ž…๋‹ˆ๋‹ค. ๋ฌด์ž‘์œ„ ์ˆซ์ž ์‹œํ€€์Šค๋ฅผ ๋‹จ์กฐ ์ฆ๊ฐ€ํ–ˆ๋‹ค๊ฐ€ ๊ฐ์†Œํ•˜๋Š” ๋น„ํŠธ ์‹œํ€€์Šค๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ๋ฐ ์ค‘์ ์„ ๋‘ก๋‹ˆ๋‹ค. ๋ณ‘๋ ฌ ํ™˜๊ฒฝ์— ์ตœ์ ํ™” ๋˜์–ด์žˆ์œผ๋ฉฐ GPU ๋ณ‘๋ ฌ ์ฒ˜๋ฆฌ๋กœ ์‚ฌ์šฉ๋˜๊ธฐ๋„ ํ•˜์ง€๋งŒ, ์—ฌ๊ธฐ์„œ๋Š” ๊ธฐํƒ€ ๋ณ‘๋ ฌํ™”ํ•œ ์ •๋ ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜๋“ค๊ณผ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ GO ์–ธ์–ด์˜ ๋™์‹œ์„ฑ ๋ชจ๋ธ๋กœ ๊ตฌํ˜„๋ฉ๋‹ˆ๋‹ค.

2๊ฐ€์ง€ ์œ ํ˜•์˜ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.

  • non-parallel
    ๋ถ„ํ•  ๋œ ๋ฐฐ์—ด์˜ ํฌ๊ธฐ๊ฐ€ 1์ด ๋  ๋•Œ๊นŒ์ง€ ๋ฐฐ์—ด์„ ์žฌ๊ท€์ ์œผ๋กœ ๋ถ„ํ• ํ•œ ๋‹ค์Œ Bitonic Sequencing Rule์— ๋”ฐ๋ผ ํ•ด๋‹น ํ•˜์œ„ ๋ฐฐ์—ด์„ ๋ณ‘ํ•ฉํ•˜์—ฌ ์ •๋ ฌํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.
  • parallel
    ์žฌ๊ท€ ํ˜ธ์ถœ์˜ ๋ณ‘๋ ฌํ™”๋ฅผ ํ†ตํ•ด ๋ถ„ํ•  ๋œ ๋ฐฐ์—ด์˜ ํฌ๊ธฐ๊ฐ€ ์ž„๊ณ„๊ฐ’๋ณด๋‹ค ์ž‘์•„์งˆ ๋•Œ๊นŒ์ง€ ๋ฐฐ์—ด์„ ์žฌ๊ท€์ ์œผ๋กœ ๋ถ„ํ• ํ•œ ๋‹ค์Œ ๋น„๋ณ‘๋ ฌํ™”๋กœ ์ „ํ™˜ํ•˜์—ฌ Bitonic Sequencing Rule์— ๋”ฐ๋ผ ํ•˜์œ„ ๋ฐฐ์—ด์„ ๋ถ„ํ•  ๋ฐ ๋ณ‘ํ•ฉํ•˜์—ฌ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

COMPLEXITY

TypeWorst-CaseAverage-CaseBest-Casein-placestableSpace Complexity
non-parallelO(nlog^2_n)O(nlog^2_n)O(nlog^2_n)YesNototal : O(nlog^2_n), auxiliary : O(nlog^2_n)
parallelO(log^2_n)O(log^2_n)O(log^2_n)YesNototal : O(nlog^2_n), auxiliary : O(nlog^2_n)


Intro Sort


์ธํŠธ๋กœ ์ •๋ ฌ์€ ์ตœ์•…์˜ ๊ฒฝ์šฐ์—๋„ ํ‰๊ท ์ ์œผ๋กœ ๋น ๋ฅธ ์„ฑ๋Šฅ๊ณผ ๋ฐ (์ ๊ทผ์ ์œผ๋กœ) ์ตœ์ ํ™” ๋œ ํ•˜์ด๋ธŒ๋ฆฌ๋“œ ์ •๋ ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜์ž…๋‹ˆ๋‹ค. ํ€ต์ •๋ ฌ๋กœ ์‹œ์ž‘ํ•˜์—ฌ ์žฌ๊ท€ ๊นŠ์ด๊ฐ€ ์ •๋ ฌ๋˜๋Š” ๋ฐฐ์—ด์˜ ์š”์†Œ ๊ฐœ์ˆ˜์— ๋”ฐ๋ฅธ ๊นŠ์ด ์ž„๊ณ„๊ฐ’(maximum depth: 2ceil(log2_n) ) ์ˆ˜์ค€์„ ์ดˆ๊ณผํ•˜๋ฉด ํž™ ์ •๋ ฌ๋กœ ์ „ํ™˜ํ•˜๊ณ  ๋ถ„ํ•  ๋œ ๋ฐฐ์—ด์˜ ์š”์†Œ ๊ฐœ์ˆ˜๊ฐ€ ๊ธธ์ด ์ž„๊ณ„๊ฐ’(16) ๋ฏธ๋งŒ์ด๋ฉด ์‚ฝ์ž… ์ •๋ ฌ๋กœ ์ „ํ™˜ํ•ฉ๋‹ˆ๋‹ค.



2๊ฐ€์ง€ ์œ ํ˜•์˜ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.

  • non-parallel
    ์ •๋ ฌํ•  ๋ฐฐ์—ด์—์„œ ํ€ต ์ •๋ ฌ์„ ์‚ฌ์šฉํ•  ๋•Œ ์š”์†Œ(ํ”ผ๋ฒ—)๋ฅผ ์„ ํƒํ•˜๊ณ  ์„ ํƒ ๋œ ํ”ผ๋ฒ—์„ ์ œ์™ธํ•œ ๋‹ค๋ฅธ ์š”์†Œ๋“ค์ด ํ”ผ๋ฒ—๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ํฐ์ง€ ์—ฌ๋ถ€์— ๋”ฐ๋ผ ๋‘ ๊ฐœ์˜ ํ•˜์œ„ ๋ฐฐ์—ด๋กœ ๋ถ„ํ• ํ•˜๊ณ  ์žฌ๊ท€ ๊นŠ์ด๊ฐ€ ํŠน์ • ์ž„๊ณ„๊ฐ’(maximum depth: 2ceil(log2_n) )์„ ๋„˜๊ธฐ ์ „๊นŒ์ง€ ์ด๋Ÿฌํ•œ ๊ณผ์ •์„ ์žฌ๊ท€์ ์œผ๋กœ ๊ฑฐ์นฉ๋‹ˆ๋‹ค.

  • parallel
    ์žฌ๊ท€ ํ˜ธ์ถœ์˜ ๋ณ‘๋ ฌํ™”๋ฅผ ํ†ตํ•ด ๊ฐ ๋ณ‘๋ ฌํ™” ๋œ ์ด์ค‘ ํ”ผ๋ฒ— ํ€ต ์ •๋ ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ๋ถ„ํ•  ๋œ ๋ฐฐ์—ด์˜ ํฌ๊ธฐ๊ฐ€ ์ž„๊ณ„๊ฐ’๋ณด๋‹ค ์ž‘์•„์ง€๊ธฐ ์ „๊นŒ์ง€ ๋ฐฐ์—ด์„ ์žฌ๊ท€์ ์œผ๋กœ ๋ถ„ํ• ํ•˜์—ฌ ์ •๋ ฌํ•ฉ๋‹ˆ๋‹ค.


COMPLEXITY

Worst-CaseAverage-CaseBest-Casein-placestableSpace Complexity
O(nlog_n)O(nlog_n)O(nlog_n)YesNototal : O(n), auxiliary : O(log_n)


Cycle Sort


์ˆœํ™˜ ์ •๋ ฌ์€ in-place ์ •๋ ฌ์ด์ž ๋ถˆ์•ˆ์ • ์ •๋ ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜์œผ๋กœ, ๋ฐฐ์—ด์— ๋Œ€ํ•ด ์ด ์“ฐ๊ธฐ(write) ์ˆ˜์˜ ๊ด€์ ์—์„œ ๊ฐ€์žฅ ์ ๊ฒŒ ์“ฐ๊ธฐ ์œ„ํ•œ ๋น„๊ต ์ •๋ ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์ž…๋‹ˆ๋‹ค.

COMPLEXITY

Worst-CaseAverage-CaseBest-Casein-placestableSpace Complexity
O(n^2)O(n^2)O(n^2)YesNototal : O(n), auxiliary : O(1)


Odd-Even Sort


์ปดํ“จํŒ… ์‹œ์Šคํ…œ ๊ด€์ ์—์„œ ํ™€์ง ์ •๋ ฌ์€ ์›๋ž˜ ์ƒํ˜ธ ๋กœ์ปฌ ์—ฐ๊ฒฐ์˜ ๋ณ‘๋ ฌ ํ”„๋กœ์„ธ์„œ์—์„œ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด ๊ฐœ๋ฐœ๋œ ๋น„๊ต์  ๊ฐ„๋‹จํ•œ ์ •๋ ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜์ž…๋‹ˆ๋‹ค

COMPLEXITY

Worst-CaseAverage-CaseBest-Casein-placestableSpace Complexity
O(n^2)O(n^2)O(n^2)YesYestotal : O(n), auxiliary : O(1)


Odd-Even Merge Sort


ํ™€์ง ๋ณ‘ํ•ฉ ์ •๋ ฌ์€ ์‚ฌ์ด์ฆˆ๋Š” O(n(log_n)^2) , ๊นŠ์ด๋Š” O((log_n)^2) ๋ฅผ ๊ฐ–๋Š” ๋„คํŠธ์›Œํฌ ์ •๋ ฌ์„ ์œ„ํ•ด Ken Batcher ์ •๋ ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์ž…๋‹ˆ๋‹ค.


COMPLEXITY

TypeWorst-CaseAverage-CaseBest-Casein-placestableSpace Complexity
non-parallelO(nlog^2_n)O(nlog^2_n)O(nlog^2_n)Yesyestotal : O(nlog^2_n), auxiliary : O(nlog^2_n)
parallelO(log^2_n)O(log^2_n)O(log^2_n)Yesyestotal : O(nlog^2_n), auxiliary : O(nlog^2_n)


Comb Sort


์ฝค ์ •๋ ฌ์€ ์›๋ž˜ 1980๋…„ Wล‚odzimierz Dobosiewicz์™€ Artur Borowy๊ฐ€ ์„ค๊ณ„ํ•œ ๋น„๊ต์  ๊ฐ„๋‹จํ•œ ์ •๋ ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜์œผ๋กœ, ๋‚˜์ค‘์— Stephen Lacey์™€ Richard Box๊ฐ€ 1991๋…„์— ์žฌ๋ฐœ๊ฒฌ(์ด ๋•Œ "Combsort"๋ผ๊ณ  ์ด๋ฆ„์„ ์ง€์ •)ํ–ˆ์Šต๋‹ˆ๋‹ค. Comb ์ •๋ ฌ์€ ์…ธ ์ •๋ ฌ๊ณผ ์œ ์‚ฌํ•œ ๋ฐฉ์‹์œผ๋กœ ๋ฒ„๋ธ” ์ •๋ ฌ์„ ๊ฐœ์„ ํ•˜์—ฌ ์„ฑ๋Šฅ์„ ํ–ฅ์ƒ ์‹œํ‚จ ์ •๋ ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜์ž…๋‹ˆ๋‹ค.

COMPLEXITY

Worst-CaseAverage-CaseBest-Casein-placestableSpace Complexity
O(n^2)O(n^2/p^2)O(nlog_n)YesNototal : O(n), auxiliary : O(1)

FAQs

Package last updated on 14 Jun 2023

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts