(adsbygoogle = window.adsbygoogle || []).push({}); O_o :: 'Quicksort' 태그의 글 목록

'Quicksort'에 해당되는 글 1건

  1. 2008.11.17 vb - Quick Sort

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

And
prev | 1 | next