-
VBA/버블정렬(Bubble sort)코딩/vba 2024. 1. 9. 15:54728x90
VB에는 Array.Sort()라는 함수가 있어 배열정렬이 가능하지만 VBA에서는 정렬함수가 따로 없다.
그래서 배열을 정렬할 함수를 별도로 만들어 써야 하는데, 그 중 많이 쓰이는 것이 코드가 간단한 버블정렬이다. 좀 느리긴 하지만 코드가 짧아 편리하다.
원리는 배열 원소의 처음부터 끝까지 하나씩 비교해가면서 좌우를 바꾸는 방식이다.
보다 상세한 내용은 위키백과를 참조한다.
그리고 위키백과나 다른 참조자료들의 그림은 직관적이지 않아 새로 그려 원리를 설명한다. 비교는 아래 그림처럼 한다.
728x90' 인수로 받는 arr 배열은 값이 아닌 참조로 받으며 variant값으로 정의 Sub BubbleSort(ByRef arr As Variant) Dim i As Integer, j As Integer Dim tmp ' 첫째 원소부터 마지막 원소 앞 원소까지 순환 For i = LBound(arr) To UBound(arr) - 1 ' 두번째 순환: 첫째 원소와 비교할 대상 원소, 첫째 다음부터 마지막까지 순환 For j = i + 1 To UBound(arr) ' 앞의 값이 뒤의 값보다 크면 첫째 값을 임시변수에 저장 후 뒷 값을 앞으로 복사하고 ' 저장해둔 임시변수의 값을 뒷자리에 붙여넣는다. If arr(i) > arr(j) Then temp = arr(i) arr(i) = arr(j) arr(j) = tmp End If Next j Next i End Sub
기능 테스트
Function myarr() As Variant ' build array for test Dim arr As Variant arr = Array("b", "a", "e", "A", 4, 20, 0, "한글", "가나다", "가마") myarr = arr End Function Sub ba_test() ' bubble sort test Dim arr As Variant Dim i As Integer arr = myarr BubbleSort arr For i = LBound(arr) To UBound(arr) Debug.Print arr(i) Next i End Sub
결과
728x90'코딩 > vba' 카테고리의 다른 글
VBA/파워포인트/사진 crop/PictureFormat.CropBottom() (2) 2024.01.10 VBA/파워포인트/사진정리 - 0. 개요 (0) 2024.01.10 VBA/PowerPoint/슬라이드 사이즈 픽셀 단위로 구하기 (0) 2024.01.09 VBA/.Value와 .Formula의 차이 (1) 2023.12.21 [VBA/Set 키워드] 개체 참조 Set 키워드 (0) 2023.06.06