https://ko.wikipedia.org/wiki/%EB%B9%97%EC%A7%88_%EC%A0%95%EB%A0%AC
main() : 20개의 난수 배열을 생성하는 함수 generateSlice를 호출한 뒤 quicksort 함수를 호출하는 메인 함수
generateSlice() : slice를 초기화한뒤 slice 배열에 1부터 999까지의 난수 - 1부터 999까지의 난수를 계산한 원소를 삽인한 배열(slice)을 리턴한다.
combsort() : 빗질정렬
package main
import (
"fmt"
"math/rand"
"time"
)
func main() {
//난수 배열 생성 함수 호출
slice := generateSlice(20)
//정렬 전
fmt.Println("\n--- Unsorted --- \n\n", slice)
//빗질 정렬 호출
combsort(slice)
//정렬 후
fmt.Println("\n--- Sorted ---\n\n", slice, "\n")
}
//난수 배열 생성
func generateSlice(size int) []int {
slice := make([]int, size, size)
rand.Seed(time.Now().UnixNano())
for i := 0; i < size; i++ {
slice[i] = rand.Intn(999) - rand.Intn(999)
}
return slice
}
func combsort(items []int) {
var (
n = len(items) //배열의 길이
gap = len(items) //배열의 길이
shrink = 1.3 //gap을 축소해주는 계수 설정
swapped = true //swap 판단 값
)
for swapped {
swapped = false
//다음 정렬을 위한 gap 밸류 업데이트
gap = int(float64(gap) / shrink)
//갭이 1 미만이면
if gap < 1 {
//갭은 1
gap = 1
}
//반복 순회 특이점은 i에 gap을 더함
for i := 0; i+gap < n; i++ {
//아이템 배열에서 i 인덱스가 i + gap 인덱스보다 크면 인덱스 위치 교환
if items[i] > items[i+gap] {
items[i+gap], items[i] = items[i], items[i+gap]
//스왑=true
swapped = true
}
}
}
}
go run comb_sort.go
--- Unsorted ---
[61 50 -447 186 29 25 -742 530 -377 261 -440 508 -159 -529 299 -140 450 -677 352 737]
--- Sorted ---
[-742 -677 -529 -447 -440 -377 -159 -140 25 29 50 61 186 261 299 352 450 508 530 737]
Golang Algorithm - ShellSort (셸 정렬) (0) | 2023.02.19 |
---|---|
Go 언어를 기반으로한 블록체인 개발공부(Peer to Peer) - Part 5 (2) | 2023.02.19 |
Golang Algorithm - binaryTree (이진트리) (0) | 2023.02.17 |
Golang Algorithm - mergeSort(병합정렬) (0) | 2023.02.15 |
Golang Algorithm - insertionSort (0) | 2023.02.14 |