溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶(hù)服務(wù)條款》

shell腳本編程之冒泡排序腳本實(shí)現(xiàn)(解釋非常詳細(xì),涉及正則表達(dá)式)

發(fā)布時(shí)間:2020-07-03 14:46:54 來(lái)源:網(wǎng)絡(luò) 閱讀:358 作者:wx5d8a17c45cb5b 欄目:系統(tǒng)運(yùn)維

shell腳本編程之冒泡排序腳本實(shí)現(xiàn)

? 冒泡排序作為編程中最為基礎(chǔ)的算法,對(duì)于計(jì)算機(jī)編程初學(xué)者而言是非常值得多研究和多多嘗試編寫(xiě)的。對(duì)于編程而言,優(yōu)劣的不是語(yǔ)言,而是實(shí)現(xiàn)功能的邏輯思維和突如其來(lái)的靈感。

? 下面將給出使用shell實(shí)現(xiàn)冒泡排序的腳本,其中涉及的正則表達(dá)式需要細(xì)細(xì)理解。具體解釋在下面的注釋中有備注。

#!/bin/bash
#學(xué)習(xí)shell腳本過(guò)程中實(shí)現(xiàn)循環(huán)輸入數(shù)生成數(shù)組,然后使用冒泡排序法進(jìn)行從小到大排序
#Author:lokott
#Version: 3.1
#冒泡排序法的核心思想為:引入變量,兩兩比較,符合不動(dòng),反之互換
#腳本如下:
#等待用戶(hù)輸入
read -p "please input num of this array:" n
#下面是test語(yǔ)句判斷輸入的是否為數(shù)字,但是錯(cuò)誤輸出提示不友好,所以換為if
#[[ $n =~ ^[0-9]+$ ]]&&echo "welcome"||exit 1
if [[ $n =~ ^[0-9]+$ ]]
then
    echo "welcome"
else
    echo "sorry you input no a number!"
    exit 1
fi
#循環(huán)n次,等待用戶(hù)輸入數(shù)字,打印顯示出數(shù)組內(nèi)容
for i in `seq $n`
do
    read -p "please input your num:" num
    if [[ $num =~ ^[0-9]+$ ]];then :
    else
        echo "sorry you input no a number!"
        exit 1
    fi
    let i=i-1
array[$i]=$num
done
echo "原順序的數(shù)組:"
echo ${array[*]}
#冒泡排序算法,核心在于下面的if語(yǔ)句,其實(shí)并不難理解,如果小時(shí)候玩過(guò)漢諾塔就非常好理解
#舉一個(gè)簡(jiǎn)單的例子:如果你想將兩杯不同果汁互換,就需要一個(gè)空杯子來(lái)作為中間媒介,這就類(lèi)似于下面的temp變量
#該腳本實(shí)現(xiàn)的是從小到大排序,因此if判斷的時(shí)候使用的是-gt;而且該腳本需要雙重循環(huán)
#雙重循環(huán)口訣:內(nèi)層循環(huán)執(zhí)行一遍,外層循環(huán)執(zhí)行一次;結(jié)合下面的j和k,就是j=0開(kāi)始執(zhí)行,而一直等到k為n時(shí)才到j(luò)=2,以此類(lèi)推。
#內(nèi)層循環(huán)控制單次比較:即先比較第一個(gè)數(shù)與后面的所有的數(shù)進(jìn)行比較,遇到比之小的與之替換,繼續(xù)執(zhí)行if(這里參與比較的變量就發(fā)生改變了)
for ((j=0;j<$n;j++))
do
    for((k=j+1;k<$n;k++))
    do
        if [[ ${array[$j]} -gt ${array[$k]} ]]
        then
            temp=${array[$j]}
            array[$j]=${array[$k]}
            array[$k]=$temp
        fi
    done
done
echo "進(jìn)行排序之后的數(shù)組:"
echo ${array[*]}

# 下面是執(zhí)行冒泡排序腳本的結(jié)果:
# [root@localhost ~]# ./test.sh 
# please input num of this array:5
# welcome
# please input your num:1
# please input your num:2
# please input your num:5
# please input your num:6
# please input your num:4
# 原順序的數(shù)組:
# 1 2 5 6 4
# 進(jìn)行排序之后的數(shù)組:
# 1 2 4 5 6
向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀(guān)點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI