美文网首页
Bash 三种排序算法的简单实现

Bash 三种排序算法的简单实现

作者: clickdiff | 来源:发表于2017-10-06 12:54 被阅读0次

    1、冒泡算法1

    从第一开始,取每个元素和,和后面元素比较,如果比自己大就和自己交换。

       #!/bin/bash
    
    typeset -a arry                                    #变量声明
    if [[ $# -ne 0 ]];then
          for i in `seq 0 $(($#-1))`;do           #循环遍历$@赋值给数组
                 arry[i]=$1
            shift
            done
    else
      arry=( 1 4 7 2 5 8 3 6 9)                #设置默认值,当空输入时候使用
    fi
    echo "${arry[@]}"                           #输出原始顺序
    long=${#arry[@]}
    for j in `seq 0 $(($long-1))`;do
    
            for i in `seq 0 $((${#arry[@]}-1))`;do
                    if [[ ${arry[$j]} -gt ${arry[$i]} ]];then    #从arry[0]开始与后面每一个比大小
                            a=${arry[$j]}
                            arry[$j]=${arry[$i]}
                            arry[$i]=$a
                            echo "${arry[@]}"
                    else
                    :    # echo "${arry[@]}"
                    fi
            done
    done
    

    maopao1
    执行结果,使用默认值

    1 4 7 2 5 8 3 6 9
    4 1 7 2 5 8 3 6 9
    7 1 4 2 5 8 3 6 9
    7 4 1 2 5 8 3 6 9
    7 4 2 1 5 8 3 6 9
    7 5 2 1 4 8 3 6 9
    7 5 4 1 2 8 3 6 9
    7 5 4 2 1 8 3 6 9
    8 5 4 2 1 7 3 6 9
    8 7 4 2 1 5 3 6 9
    8 7 5 2 1 4 3 6 9
    8 7 5 4 1 2 3 6 9
    8 7 5 4 2 1 3 6 9
    8 7 5 4 3 1 2 6 9
    8 7 5 4 3 2 1 6 9
    8 7 6 4 3 2 1 5 9
    8 7 6 5 3 2 1 4 9
    8 7 6 5 4 2 1 3 9
    8 7 6 5 4 3 1 2 9
    8 7 6 5 4 3 2 1 9
    9 7 6 5 4 3 2 1 8
    9 8 6 5 4 3 2 1 7
    9 8 7 5 4 3 2 1 6
    9 8 7 6 4 3 2 1 5
    9 8 7 6 5 3 2 1 4
    9 8 7 6 5 4 2 1 3
    9 8 7 6 5 4 3 1 2
    9 8 7 6 5 4 3 2 1

    2、冒泡2
    相邻元素两两比较,如果后面比前面小就交换

    #!/bin/bash
    typeset -a arry
    arry=(1 4 7 2 5 8 3 6 9)
    long=${#arry[@]}
    b=$long
    for j in `seq 0 $b`;do
    
            for i in `seq 0 $((${#arry[@]}-2))`;do
                    if [[ ${arry[$i]} -gt ${arry[$(($i+1))]} ]];then
                            a=${arry[$(($i+1))]}
                            arry[$(($i+1))]=${arry[$i]}
                            arry[$i]=$a
                            echo "${arry[@]}"  
                    else
                            :       #echo "${arry[@]}"
                    fi
            done
    done
    

    执行结果:

    1 4 2 7 5 8 3 6 9
    1 4 2 5 7 8 3 6 9
    1 4 2 5 7 3 8 6 9
    1 4 2 5 7 3 6 8 9
    1 2 4 5 7 3 6 8 9
    1 2 4 5 3 7 6 8 9
    1 2 4 5 3 6 7 8 9
    1 2 4 3 5 6 7 8 9
    1 2 3 4 5 6 7 8 9

    3、快速排序

    通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。

    for i in `seq 0 "$(($#-1))"`;do
            a[i]=${!i}  #eval echo \$$i $$-->pid
    done
    
    echo ${a[@]}
    swap()  
    {
        tmp=${a[$1]}
        a[$1]=${a[$2]}
        a[$2]=$buff
    }
    
    typeset -i t
    fun()  
    {
        i=$(($1-1))
        j=$1
        t=${a[$2]}
        if test $1 -ge $2 ;then
            return 2
        fi
            while [ $j -le $2 ];do
             while   [ $j -lt $2 -a ${a[$j]} -gt $t ] ;do
                 j=$(($j+1))
                done
                i=$(($i+1))
                swap $i $j
                j=$(($j+1))
            done
         fun 0 $(($i-1))
     fun $(($i+2)) $2
    }
    fun 0 $((${#a[@]}-1))
    for((i=0;i<$((${#a[@]}-1));i++))
    {
        echo -n ${a[$i]} " "  
    }
    echo  
    exit 0
    

    执行结果

    [root@localhost ~]# bash sort2.sh 1 5 8 2 4 7 3 6 9 0 40 12 32 8 12 13
    1 5 8 2 4 7 3 6 9 0 40 12 32 8 12 13
    0 1 2 3 4 5 6 7 8 8 9 12 12 13 32 40

    qucik_sort

    相关文章

      网友评论

          本文标题:Bash 三种排序算法的简单实现

          本文链接:https://www.haomeiwen.com/subject/rgwlyxtx.html