Bash 三種排序算法的簡單實現

Bash 三種排序算法的簡單實現

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

原創文章,作者:phosphor,如若轉載,請注明出處:http://www.www58058.com/79540

(0)
phosphorphosphor
上一篇 2017-07-09 13:56
下一篇 2017-07-09 16:21

相關推薦

  • 馬哥教育網絡版25期+第一周作業

    1、描述計算機的組成及其功能 計算機是由CPU,控制器,RAM,輸入設備,輸出設備組成的 2、按系列羅列Linux的發行版,并描述不同發行版之間的聯系與區別 現如今主流的LINUX發行版系列主要有: Debian,Slackware,Redhat,這些發行版都是基于GUNLinux開發的,不過是由不同的組織或團體開發并發行的。 3、描述Linux的哲學思想,…

    Linux干貨 2016-12-05
  • 單用戶模式破解密碼與密碼的加密

    當你坐在一臺CentOS 6主機前,但是卻不知道密碼,要怎樣破解掉密碼進入系統呢? 答案很簡單: 1、啟動系統,當出現如下界面時,按任意鍵 2、你會看到這個畫面 3、敲擊“a”鍵,執行modifiy the kernel arguments 4、鍵入“1”鍵,進入單用戶模式 5、至此,你已經成功進入系統,并修改了密碼! 是不是覺得Centos6的系統這樣安全…

    Linux干貨 2016-09-13
  • N25期—第一周作業

    計算機的組成及其功能 Linux發行版介紹 Linux哲學思想 Linux系統幾個常用命令介紹 Linux系統獲取幫助信息介紹 Linux基礎目錄介紹 計算機組成         計算機分為中央處理器,主存儲器,輔助存儲器,輸入輸出設備,總線等5個部分    &nbsp…

    Linux干貨 2016-12-05
  • yum與rpm包

    yum與rpm包 包命名和工具 包:分類和拆包 Application-VERSION-ARCH.rpm:主包 Application-devel-VERSION-ARCH.rpm 開發子包 Application-utils-VERSION-ARHC.rpm 其它子包 Application-libs-VERSION-ARHC.rpm 其它子包 包之間:可…

    Linux干貨 2017-05-08
  • 創建,擴展,縮減LVM2及快照

    相關概念     lvm英文 Logical Volume Manager,邏輯卷管理類似于raid,但又有別于raid, 它是能夠將一個或多個底層塊設     備組織成一個邏輯設備的模塊不具備容錯功能,任一設備損壞或分區損壞,對數據是致命的;它主要有三個部分…

    Linux干貨 2016-02-14
  • 推薦-tree命令的安裝和使用

    一、前言     tree命令是可以把指定文件夾的所以文件用樹狀羅列出來,呈現目錄形式的一個命令。在Centos 6.5中默認不能直接使用: 輸入type tree命令(type COMMAND:區別是內建命令還是外部命令)提示不存在: 二、安裝       …

    系統運維 2016-03-27
欧美性久久久久