Go 언어 삽입 정렬 구현하기

오늘은 Go 언어로 삽입 정렬을 구현해보려 합니다.

package main

import (
	"fmt"
)

정렬을 한 배열을 출력하기 위해 fmt 패키지를 가져옵니다.

func insertion(arr []int) []int {
	for i := 1; i < len(arr); i++ {

배열의 길이정도 반복하면서 i를 1로 주어 첫번째는 이미 정렬됬음을 가정하고 시작합니다.

		for j := i; j > 0 && arr[j-1] > arr[j]; j-- {
			arr[j-1], arr[j] = arr[j], arr[j-1]
		}
    }

j를 i에서 가져와서 j가 0보다 크면서 j번째가 j-1번째보다 작을 때만 j를 감소시키면서 서로의 자리를 바꾸어줍니다.

j가 가장 작은 수인 경우에는 for문이 계속 반복되어 첫번째 인덱스까지 도달하게 됩니다.

이를 이중 for문으로 반복하다보면 정렬되어있는 배열의 왼쪽이 점점 늘어나면서 곧 모든 인덱스가 정렬됩니다.

	return arr
}

반복이 끝나면 배열을 반환합니다.

func main() {
	arr := []int{3, 7, 4, 1, 7, 5, 4, 8}
	fmt.Println(arr)
	fmt.Println(insertion(arr))
}

메인 함수에서 정수형 배열을 준비하고, insertion 함수에 배열을 넣어주면 정렬된 배열이 반환되면서 출력됩니다.

Written on November 12, 2018