shell学习笔记(二)


来一下快速排序吧,把let和eval 去掉, 用全局数组,可读性好多了。


http://cyent.blog.51cto.com/905592/745659

http://www.cnblogs.com/skyaspnet/archive/2010/11/03/1868298.html



#Normal Quick-Sort algorithm   
Quick_Sort(){
    #Sort Numeric-array in ASC order, using normal Quick-Sort algorithm.   
    #C code: http://www.cnblogs.com/skyaspnet/archive/2010/11/03/1868298.html   
    #Usage: Quick_Sort lowest_index highest_index array_name   
    #e.g.,  Quick_Sort 0 9 array1   
    #e.g.,  Quick_Sort 1 3 array2   

    local pivot=${t_array[${1}]}
    local low=${1}
    local high=${2}

    [ ${1} -ge ${2} ] && return

    while ((  low  <  high )); do      

    local pivot=${t_array[${1}]}
    local low=${1}
    local high=${2}

    [ ${1} -ge ${2} ] && return

    while ((  low  <  high )); do
        while (( low < high )) &&  [ ${pivot} -le ${t_array[${high}]} ]; do         
             ((high--))   
        done   
        if [ ${pivot} -gt ${t_array[${high}]} ]; then  
             t_array[${low}]=${t_array[${high}]}   
             t_array[${high}]=${pivot}   
            ((low++)) 
        fi   
  
        while (( low < high ))  && [ ${pivot} -ge ${t_array[${low}]} ]; do    
             ((low++))   
        done   
        if [ ${pivot} -lt ${t_array[${low}]}) ]; then  
            t_array[${high}]=${t_array[${low}]}
            t_array[${low}]=${pivot}
            ((high--))
        fi   
    done

    #Execute the Quick_Sort function recursively   
    Quick_Sort ${1} $[${low}-1] t_array
    Quick_Sort $[${low}+1] ${2} t_array

    unset  pivot low high   
}

main(){
    read -ep "Input Numeric: " numeric

    t_array=(${numeric})
    size=${#t_array[@]}
    #Output the original array   
    for((i=0;i<size;i++)); do
        printf "%d " ${t_array[${i}]}
    done
    printf "\n"

    Quick_Sort 0 $((size-1)) t_array

    #Output the sorted array   
    for((i=0;i<size;i++)); do
        printf "%d " ${t_array[${i}]}
    done
    printf "\n"
}

main



posted @ 2013-09-22 11:40  程序员杰诺斯  阅读(91)  评论(0编辑  收藏  举报