加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

Bash : 冒泡排序

发布时间:2020-12-15 17:13:48 所属栏目:安全 来源:网络整理
导读:declare -a myArr=( ) =${myArr[$ ]=${myArr[$ ]= return } = 通过 span style="color: #0000ff"for span style="color: #000000" 循环对数组排序,注意此时是以字符串来比较的 span style="color: #0000ff"for (( span style="color: #0000ff"last = $arrle

declare -a myArr=( )

=${myArr[$]=${myArr[$]=return

}

=通过 <span style="color: #0000ff">for<span style="color: #000000"> 循环对数组排序,注意此时是以字符串来比较的

<span style="color: #0000ff">for (( <span style="color: #0000ff">last = $arrlen ; <span style="color: #0000ff">last > <span style="color: #800080">1 ; <span style="color: #0000ff">last--<span style="color: #000000"> ))
<span style="color: #0000ff">do
<span style="color: #0000ff">for (( i = <span style="color: #800080">0 ; i < <span style="color: #0000ff">last - <span style="color: #800080">1 ; i++<span style="color: #000000"> ))
<span style="color: #0000ff">do<span style="color: #000000">
[[ <span style="color: #800000">"<span style="color: #800000">${myArr[$i]}<span style="color: #800000">" > <span style="color: #800000">"<span style="color: #800000">${myArr[$((i+1))]}<span style="color: #800000">" ]] && exchangeEle $i $((i+<span style="color: #800080">1<span style="color: #000000">))
<span style="color: #0000ff">done
<span style="color: #0000ff">done

[[ -gt ]] && exchangeEle $i $((i+))

myArr=

# 从索引 获取数组的长度,并用来控制循环的次数。

n=<span style="color: #000000">${#myArr[@]}

<span style="color: #0000ff">echo <span style="color: #800000">"<span style="color: #800000">Start bubbling sort:<span style="color: #800000">"
<span style="color: #0000ff">while [ <span style="color: #800000">"<span style="color: #800000">$n<span style="color: #800000">" -gt <span style="color: #800080">1 ] # 执行 n-<span style="color: #800080">1<span style="color: #000000"> 轮外部循环。
<span style="color: #0000ff">do<span style="color: #000000">
index=<span style="color: #800080">0<span style="color: #000000"> # 内部循环时的数组元素索引,在每轮循环开始之前需要重置。
<span style="color: #0000ff">while [ <span style="color: #800000">"<span style="color: #800000">$index<span style="color: #800000">" -lt $(<span style="color: #0000ff">expr $n - <span style="color: #800080">1<span style="color: #000000">) ] # 开始内部循环。
<span style="color: #0000ff">do
<span style="color: #0000ff">if [[ ${myArr[$index]} > ${myArr[$(<span style="color: #0000ff">expr $index + <span style="color: #800080">1<span style="color: #000000">)]} ]]
<span style="color: #0000ff">then<span style="color: #000000">
exchangeEle $index $(<span style="color: #0000ff">expr $index + <span style="color: #800080">1<span style="color: #000000">) # 交换数组元素位置。
<span style="color: #0000ff">fi<span style="color: #000000">
let <span style="color: #800000">"<span style="color: #800000">index += 1<span style="color: #800000">"
<span style="color: #0000ff">done<span style="color: #000000"> # 内部循环结束。
let <span style="color: #800000">"<span style="color: #800000">n -= 1<span style="color: #800000">" # 外部循环计数减 <span style="color: #800080">1<span style="color: #000000">。

输出每轮排序后的结果。

</span><span style="color: #0000ff"&gt;echo</span> <span style="color: #800000"&gt;"</span><span style="color: #800000"&gt;${myArr[*]}</span><span style="color: #800000"&gt;"</span>

<span style="color: #0000ff">done<span style="color: #000000"> # 外部循环结束。

<span style="color: #0000ff">echo <span style="color: #800000">"<span style="color: #800000">Sorted data order:<span style="color: #800000">"
<span style="color: #0000ff">echo <span style="color: #800000">"<span style="color: #800000">${myArr[*]}<span style="color: #800000">"

#!/bin/-定义函数 exchangeEle() 交换数组中两个元素的位置

exchangeEle()
{

使用临时变量保存数组元素

local temp</span>=${myArr[$<span style="color: #800080"&gt;1</span><span style="color: #000000"&gt;]}
# 交换元素的位置
myArr[$</span><span style="color: #800080"&gt;1</span>]=${myArr[$<span style="color: #800080"&gt;2</span><span style="color: #000000"&gt;]}
myArr[$</span><span style="color: #800080"&gt;2</span>]=<span style="color: #000000"&gt;$temp

return

}

declare -a myArr=(<span style="color: #800080">10 <span style="color: #800080">1 <span style="color: #800080">30 <span style="color: #800080">13 <span style="color: #800080">2 <span style="color: #800080">22<span style="color: #000000">)

从索引 <span style="color: #800080">0<span style="color: #000000"> 开始列出整个数组

<span style="color: #0000ff">echo <span style="color: #800000">"<span style="color: #800000">The order of the original data in the array:<span style="color: #800000">"
<span style="color: #0000ff">echo <span style="color: #800000">"<span style="color: #800000">${myArr[*]}<span style="color: #800000">"<span style="color: #000000">

获取数组的长度

arrlen=<span style="color: #000000">${#myArr[@]}

通过 <span style="color: #0000ff">for<span style="color: #000000"> 循环对数组排序,注意此时是以字符串来比较的

<span style="color: #0000ff">for (( <span style="color: #0000ff">last = $arrlen ; <span style="color: #0000ff">last > <span style="color: #800080">1 ; <span style="color: #0000ff">last--<span style="color: #000000"> ))
<span style="color: #0000ff">do
<span style="color: #0000ff">for (( i = <span style="color: #800080">0 ; i < <span style="color: #0000ff">last - <span style="color: #800080">1 ; i++<span style="color: #000000"> ))
<span style="color: #0000ff">do<span style="color: #000000">
[[ <span style="color: #800000">"<span style="color: #800000">${myArr[$i]}<span style="color: #800000">" > <span style="color: #800000">"<span style="color: #800000">${myArr[$((i+1))]}<span style="color: #800000">" ]] && exchangeEle $i $((i+<span style="color: #800080">1<span style="color: #000000">))
<span style="color: #0000ff">done
<span style="color: #0000ff">done

<span style="color: #0000ff">echo <span style="color: #800000">"<span style="color: #800000">Sorted data order as string:<span style="color: #800000">"
<span style="color: #0000ff">echo <span style="color: #800000">"<span style="color: #800000">${myArr[*]}<span style="color: #800000">"<span style="color: #000000">

通过 <span style="color: #0000ff">for<span style="color: #000000"> 循环对数组排序,这次是作为整数来比较

<span style="color: #0000ff">for (( <span style="color: #0000ff">last = $arrlen ; <span style="color: #0000ff">last > <span style="color: #800080">1 ; <span style="color: #0000ff">last--<span style="color: #000000"> ))
<span style="color: #0000ff">do
<span style="color: #0000ff">for (( i = <span style="color: #800080">0 ; i < <span style="color: #0000ff">last - <span style="color: #800080">1 ; i++<span style="color: #000000"> ))
<span style="color: #0000ff">do<span style="color: #000000">
[[ <span style="color: #800000">"<span style="color: #800000">${myArr[$i]}<span style="color: #800000">" -gt <span style="color: #800000">"<span style="color: #800000">${myArr[$((i+1))]}<span style="color: #800000">" ]] && exchangeEle $i $((i+<span style="color: #800080">1<span style="color: #000000">))
<span style="color: #0000ff">done
<span style="color: #0000ff">done

<span style="color: #0000ff">echo <span style="color: #800000">"<span style="color: #800000">Sorted data order as number:<span style="color: #800000">"
<span style="color: #0000ff">echo <span style="color: #800000">"<span style="color: #800000">${myArr[*]}<span style="color: #800000">"<span style="color: #000000">

myArr=<span style="color: #000000">(Ukraine Zaire Russia Yemen Syria
Argentina Japan Mexico Greece)

这里我们还使用转义符 将数组元素的值放在不同的行上,这样可以避免行中的内容过长。

从索引 <span style="color: #800080">0<span style="color: #000000"> 开始列出整个数

<span style="color: #0000ff">echo <span style="color: #800000">"<span style="color: #800000">The order of the original data in the array:<span style="color: #800000">"
<span style="color: #0000ff">echo <span style="color: #800000">"<span style="color: #800000">${myArr[*]}<span style="color: #800000">"<span style="color: #000000">

获取数组的长度,并用来控制循环的次数。

n=<span style="color: #000000">${#myArr[@]}

<span style="color: #0000ff">echo <span style="color: #800000">"<span style="color: #800000">Start bubbling sort:<span style="color: #800000">"
<span style="color: #0000ff">while [ <span style="color: #800000">"<span style="color: #800000">$n<span style="color: #800000">" -gt <span style="color: #800080">1 ] # 执行 n-<span style="color: #800080">1<span style="color: #000000"> 轮外部循环。
<span style="color: #0000ff">do<span style="color: #000000">
index=<span style="color: #800080">0<span style="color: #000000"> # 内部循环时的数组元素索引,在每轮循环开始之前需要重置。
<span style="color: #0000ff">while [ <span style="color: #800000">"<span style="color: #800000">$index<span style="color: #800000">" -lt $(<span style="color: #0000ff">expr $n - <span style="color: #800080">1<span style="color: #000000">) ] # 开始内部循环。
<span style="color: #0000ff">do
<span style="color: #0000ff">if [[ ${myArr[$index]} > ${myArr[$(<span style="color: #0000ff">expr $index + <span style="color: #800080">1<span style="color: #000000">)]} ]]
<span style="color: #0000ff">then<span style="color: #000000">
exchangeEle $index $(<span style="color: #0000ff">expr $index + <span style="color: #800080">1<span style="color: #000000">) # 交换数组元素位置。
<span style="color: #0000ff">fi<span style="color: #000000">
let <span style="color: #800000">"<span style="color: #800000">index += 1<span style="color: #800000">"
<span style="color: #0000ff">done<span style="color: #000000"> # 内部循环结束。
let <span style="color: #800000">"<span style="color: #800000">n -= 1<span style="color: #800000">" # 外部循环计数减 <span style="color: #800080">1<span style="color: #000000">。

输出每轮排序后的结果。

</span><span style="color: #0000ff"&gt;echo</span> <span style="color: #800000"&gt;"</span><span style="color: #800000"&gt;${myArr[*]}</span><span style="color: #800000"&gt;"</span>

<span style="color: #0000ff">done<span style="color: #000000"> # 外部循环结束。

<span style="color: #0000ff">echo <span style="color: #800000">"<span style="color: #800000">Sorted data order:<span style="color: #800000">"
<span style="color: #0000ff">echo <span style="color: #800000">"<span style="color: #800000">${myArr[*]}<span style="color: #800000">"

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读