'Quicksort'에 해당되는 글 1건
- 2008.11.17 vb - Quick Sort
' --------------------------------------------------------
' Quick Sort
' --------------------------------------------------------
Function QuickSort(vec, loBound, hiBound)
Dim pivot,loSwap,hiSwap,temp
' QuickSort는 정렬이 안된 배열을 정렬할 때 가장 빠른 방식이다.
' 정렬되어야 할 아이템이 두 개일 경우
if hiBound - loBound = 1 then
if vec(loBound) > vec(hiBound) then
temp=vec(loBound)
vec(loBound) = vec(hiBound)
vec(hiBound) = temp
End If
End If
' 정렬되어야 할 아이템이 세 개 이상일 경우
pivot = vec(int((loBound + hiBound) / 2))
vec(int((loBound + hiBound) / 2)) = vec(loBound)
vec(loBound) = pivot
loSwap = loBound + 1
hiSwap = hiBound
do
' 적절한 loSwap 찾기
while loSwap < hiSwap and vec(loSwap) <= pivot
loSwap = loSwap + 1
wend
' 적절한 hiSwap 찾기
while vec(hiSwap) > pivot
hiSwap = hiSwap - 1
wend
' loSwap이 hiSwap보다 작으면 값 교체
if loSwap < hiSwap then
temp = vec(loSwap)
vec(loSwap) = vec(hiSwap)
vec(hiSwap) = temp
End If
loop while loSwap < hiSwap
vec(loBound) = vec(hiSwap)
vec(hiSwap) = pivot
' QuickSort의 백미 : 재귀 호출(Recursively call function)
'첫 번째 섹션에서 두 개 또는 그 이상의 아이템
if loBound < (hiSwap - 1) then Call QuickSort(vec,loBound,hiSwap-1)
'두 번째 섹션에서 두 개 또는 그 이상의 아이템
if hiSwap + 1 < hibound then Call QuickSort(vec,hiSwap+1,hiBound)
End Function