- 底部
- 底部的位置
内容请参考《》一文):
return
}
<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
》一文。
名称:
内容过长。具体的代码如下:
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">echo</span> <span style="color: #800000">"</span><span style="color: #800000">${myArr[*]}</span><span style="color: #800000">"</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">"
显示排序的过程,这次输出了每轮排序后的中间结果:
代码
代码:
exchangeEle()
{
使用临时变量保存数组元素
local temp</span>=${myArr[$<span style="color: #800080">1</span><span style="color: #000000">]}
# 交换元素的位置
myArr[$</span><span style="color: #800080">1</span>]=${myArr[$<span style="color: #800080">2</span><span style="color: #000000">]}
myArr[$</span><span style="color: #800080">2</span>]=<span style="color: #000000">$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">echo</span> <span style="color: #800000">"</span><span style="color: #800000">${myArr[*]}</span><span style="color: #800000">"</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">"