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
下一篇 2017-07-09

相關推薦

  • 新鮮出爐的一篇好PPT,MySQL Optimizer團隊力作

    新鮮出爐的一篇好PPT,MySQL Optimizer團隊Senior Principal Software Engineer ?ystein同學親自操刀完成的《How to Analyze and Tune MySQL Queries for Better Performance》內容值得期待,有實現分析,有實戰用例。有需要的朋友可以點擊下載! 下載地址:…

    Linux干貨 2015-02-27
  • linux用戶和組及其配置

    LINUX用戶和組概念及相關配置 1.   用戶 我們在使用linux過程中,最直觀的就是用戶。用戶就是我們要登錄、操作的那個人。系統驗證密碼的過程就是在驗證“你就是你”的過程。用戶分為管理員和普通用戶,計算機能識別的語言就是一堆的數字。你所看到的用戶名計算機也會把它轉化為數字,叫做ID號。管理員的ID為0,普通用戶分為兩種,一種是系統用…

    Linux干貨 2016-10-24
  • history          每打開一個終端都會從文件(.bash_history)中加載歷史記錄           不同終端歷史記錄不同彼此終端不共享 …

    2017-07-15
  • N26-博客作業-week3

    1、列出當前系統上所有已經登錄的用戶的用戶名,注意:同一個用戶登錄多次,則只顯示一次即可。 ~]# who | cut -d” ” -f1 | sort -u 2、取出最后登錄到當前系統的用戶的相關信息。 ~]# last -n 1 3、取出當前系統上被用戶當作其默認shell的最多的那個shell。 ~]# cut /etc/pas…

    Linux干貨 2017-02-19
  • Linux磁盤管理(一)之分區、格式化、掛載使用

    磁盤管理(一)   本章節內容: 磁盤結構 分區類型   管理分區   管理文件系統   掛載設備   一、磁盤結構: 1、設備號碼:  主設備號:major number, 標識設備類型 次設備號:minor number, 標識同一類型下的不同設備  &n…

    Linux干貨 2016-08-26
  • 高級文件系統管理2

    邏輯卷管理器(LVM),允許對卷進行方便操作的抽象層,包括重新設定文件系統的大小。允許在多個物理設備間重新組織文件系統。其步驟大體如下:將設備指定為物理卷,用一個或者多個物理卷來創建一個卷組,物理卷你是用固定大小的物理區域(PE)來定義的,在物理卷上創建的邏輯卷是由物理區域組成,可以在邏輯卷上創建文件系統。 一、知識整理 1、LVM設備名:dm-#。 軟鏈接…

    Linux干貨 2016-09-13
欧美性久久久久