function partion(arr, left, right)
     local tmp = arr[left]        
     while left < right do    
        while left < right and arr[right] >= tmp do
           right = right - 1
        end            
        
        if left < right then
            arr[left] = arr[right]
            left = left + 1
        end            
        
        while left < right and arr[left] <= tmp do
           left = left + 1            
        end    
        
        if left < right then
            arr[right] = arr[left]                
            right = right - 1
        end                
    end 

    arr[left] = tmp            
    return left
end

function qsort(arr, left, right) 
    if left < right then
        local index = partion(arr, left, right)
        qsort(arr, left, index-1)        
        qsort(arr, index + 1, right)        
    end
end

function q_sort(arr, left, right) 
    if left >= right then
        return            
    end
    
    local i = left
    local j = right
    local key = arr[left]
    
    while i < j do    
        while i < j and key <= arr[j] do
            j = j - 1
        end        
        
        arr[i] = arr[j]
        
        while i < j and key >= arr[i] do
            i = i + 1
        end
        arr[j] = arr[i]
    end    
    
    arr[i] = key
    q_sort(arr, left , i-1)
    q_sort(arr, i+1 , right)
end

function show_table(tb) 
    for i = 1, #tb, 1 do
        print(tb[i])        
    end
end    

tb = {9,8,4,5,1,2,3}
q_sort(tb, 1, #tb)
show_table(tb)


 

posted on 2015-06-30 21:38  听风的日子  阅读(928)  评论(0编辑  收藏  举报