Golang 버블 정렬 알고리즘에 대한 자세한 설명
버블 정렬은 일반적인 정렬 알고리즘으로 그 원리는 매우 간단하며 일종의 교환 정렬입니다. 이 알고리즘의 핵심 아이디어는 인접한 두 요소의 크기를 비교한 다음 크기 관계에 따라 위치를 교환하는 것입니다. 각 라운드에서 가장 큰 요소 또는 가장 작은 요소가 시퀀스의 한쪽 끝에 배열됩니다. 구체적인 구현 방법에는 두 가지가 있습니다. 하나는 앞에서 뒤로, 다른 하나는 뒤에서 앞으로입니다. 이 기사에서는 golang의 버블 정렬 구현을 소개합니다.
먼저 정수 배열을 만들고 버블 정렬 함수를 전달합니다.
package main import "fmt" func main() { arr := []int{3, 7, 1, 4, 2, 8, 5, 9, 6} fmt.Println("排序前:",arr) BubbleSort(arr) fmt.Println("排序后:",arr) } func BubbleSort(arr []int) { n := len(arr) for i := 0; i < n-1; i++ { for j := 0; j < n-1-i; j++ { if arr[j] > arr[j+1] { arr[j], arr[j+1] = arr[j+1], arr[j] } } } }
BubbleSort 함수에서는 먼저 배열의 길이를 가져온 다음 두 개의 루프 중첩을 설정합니다. 외부 루프는 전체 배열에 대한 루프이고 내부 루프는 요소에 대한 루프입니다. 내부 루프에서는 인접한 요소의 크기를 비교한 다음 크기 관계에 따라 위치를 바꿉니다.
교환 방식은 golang의 다중 할당, 즉 "arr[j], arr[j+1] = arr[j+1], arr[j]"를 통해 구현됩니다. 이 문은 arr[j+1]의 값을 arr[j]에 할당하고 arr[j]의 값을 arr[j+1]에 할당합니다. 이렇게 하면 두 요소 간의 교환이 완료될 수 있습니다.
각 정렬 라운드에서 가장 작거나 가장 큰 요소가 시퀀스의 한쪽 끝으로 이동된다는 점에 유의해야 합니다. 효율성을 보장하기 위해 외부 루프에서 정렬된 요소 i의 수, 즉 "for j := 0; j
마지막으로 메인 함수에서 BubbleSort 함수를 호출하고 사전 정렬 및 사후 정렬 배열 결과를 콘솔에 인쇄합니다.
다음으로 이 알고리즘의 성능을 테스트합니다. 테스트를 위해 golang의 자체 테스트 라이브러리를 사용할 수 있습니다. 구체적인 테스트 코드는 다음과 같습니다.
package main import ( "testing" ) func TestBubbleSort(t *testing.T) { arr := []int{3, 7, 1, 4, 2, 8, 5, 9, 6} BubbleSort(arr) if !checkSort(arr) { t.Error("BubbleSort test failed") } } func checkSort(arr []int) bool { n := len(arr) for i := 0; i < n-1; i++ { if arr[i] > arr[i+1] { return false } } return true }
메인 함수에서는 우리가 작성한 BubbleSort 함수의 정확성을 테스트하는 데 사용되는 TestBubbleSort라는 함수를 정의합니다. 테스트 함수에서는 BubbleSort 함수를 호출하고 checkSort 함수를 사용하여 정렬 결과가 올바른지 확인합니다. 정렬 결과가 올바르지 않은 경우 "BubbleSort 테스트 실패"라는 오류 메시지가 출력됩니다.
다음으로 go test 명령을 사용하여 테스트를 실행합니다. 명령줄에 다음 명령을 입력하세요.
go test -v -run="TestBubbleSort"
이 명령은 TestBubbleSort 기능을 실행하고 테스트 결과를 콘솔에 출력합니다. 결과는 다음과 같습니다.
=== RUN TestBubbleSort --- PASS: TestBubbleSort (0.00s) PASS ok _/home/go_ws/src/gotest/src/TestBubbleSort 0.097s
테스트 결과에서 볼 수 있듯이 정렬 알고리즘은 단위 테스트를 통과했으며 테스트 시간은 0.097초에 불과했습니다. 따라서 버블 정렬 알고리즘은 효율성 측면에서 좋은 성능을 발휘합니다.
Summary
이 글에서는 golang의 버블 정렬 구현을 소개하고, 단위 테스트를 통해 정렬 알고리즘의 정확성과 효율성을 검증합니다. 실제 응용 프로그램에서는 더 나은 정렬 결과를 얻기 위해 필요에 따라 이 알고리즘을 적절하게 최적화할 수 있습니다.
위 내용은 골랑 버블링의 순위를 매기는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!