don't stop believing

Selection Sort - 선택 정렬 본문

Golang/Basic

Selection Sort - 선택 정렬

Tongchun 2019. 4. 19. 18:04

제자리 정렬이라고도 합니다.

최소값을 배열의 가장 앞자리와 교체합니다.

 

https://en.wikipedia.org/wiki/Selection_sort

 

Selection sort - Wikipedia

In computer science, selection sort is a sorting algorithm, specifically an in-place comparison sort. It has O(n2) time complexity, making it inefficient on large lists, and generally performs worse than the similar insertion sort. Selection sort is noted

en.wikipedia.org

 

Go로 구현한 코드입니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
package main
import "fmt"
func main() {
arr := [10]int{9, 1, 2, 8, 6, 7, 5, 3, 0, 4}
fmt.Println("Initial array is:", arr)
fmt.Println("")
var min int
for i := 0; i < len(arr)-1; i++ {
min = i
for j := i + 1; j < len(arr); j++ {
if arr[min] > arr[j] {
min = j
}
}
arr[i], arr[min] = arr[min], arr[i]
}
fmt.Println("Sorted array: ", arr)
}
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

각 코드에 대한 설명을 주석으로 달았습니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
package main
import "fmt"
func main() {
// 10 int 0 9 .
arr := [10]int{9, 1, 2, 8, 6, 7, 5, 3, 0, 4}
fmt.Println("Initial array is:", arr)
fmt.Println("")
// min tmp .
var min int
// loop . i min (index) .
for i := 0; i < len(arr)-1; i++ {
min = i
// loop min loop .
// min(index) 0 j 1 9 .
// min(index) 1 j 2 9 .
// min(index) 2 j 3 9 .
for j := i + 1; j < len(arr); j++ {
// min min .
// arr[min] > arr[j] .
// arr[min] < arr[j] .
if arr[min] > arr[j] {
// min min 릿 min .
// (index) min .
min = j
}
}
// i 릿 릿 min .
arr[i], arr[min] = arr[min], arr[i]
}
fmt.Println("Sorted array: ", arr)
}
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

selection sort로 검색해 찾은 go 코드도 비슷하네요.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
package main
import (
"fmt"
)
func selectionSort(array []int) {
for i := 0; i < len(array)-1; i++ {
min := i
for j := i + 1; j < len(array); j++ {
if array[j] < array[min] {
min = j
}
}
array[i], array[min] = array[min], array[i]
}
}
func main() {
array := []int{5, 8, 4, 1, 7, 2, 3, 6}
fmt.Println("Unsorted array: ", array)
selectionSort(array)
fmt.Println("Sorted array: ", array)
}
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

버블 정렬보다는 조금 더 빠르다고 합니다.

코드도 버블 정렬보다는 간결해 보입니다.

 

'Golang > Basic' 카테고리의 다른 글

Gnome Sort - 난쟁이 정렬  (0) 2019.04.25
Cocktail Sort - 칵테일 정렬  (0) 2019.04.22
Merge Sort - 병합 정렬  (0) 2019.04.20
Bubble Sort - 버블 정렬  (0) 2019.04.18
Golang << 와 >> 연산자 (그리고 메모리 사이즈 계산)  (0) 2019.02.28