冒泡排序
如图所示:
冒泡排序的流程图
下面来举一个例子
创建脚本:vi test.sh
让数组里的数字自动从小到大排序
编辑脚本:
#!/bin/bash
array=(3 2 5 1 4)
for ((i=1;i<${#array[*]}; i++)) #比较轮数为数组,长度减一,从1开始
do
for ((j=0; j<${#array[*]}-i; j++)) #比较相邻的两个元素,较大的数往后放
do
if [ ${array[$j]} -gt ${array[$[$j + 1]]} ];then
temp=${array[$j]} #把第一个元素值保存到临时变量中
array[$j]=${array[$[$j+1]]} #把第二个元素值保存到第一个元素中
array[$[$j+1]]=$temp #把临时变量(也就是第一个元素原值) 保存到第二个元素中
fi
done
done
echo ${array[*]}
执行脚本:
再从大往小进行排列
- 只需要把这一行代码的"gt"大于 改为"lt"小于即可实现
if [ ${array[$j]} -lt ${array[$[$j + 1]]} ];then
执行:
在家目录中创建一个arr.txt文件,内容如下,请用冒泡排序对此文件内容排序,要求冒泡排序部分代码使用函数调用
编辑脚本:
[root@localhost ~]# vi test3.txt
test1(){ //定义函数
e=($(echo $@)) //将分解的数组参数合并,并且组成一个新的数组
for ((i=1;i<${#e[*]};i++)) //设置排序轮数 ,轮数等于数组长度-1
do
for ((j=0;j<${#e[*]}-i;j++)) //比较次数随着轮数-1
do
if [ ${e[$j]} -gt ${e[$[$j+1]]} ];then //设置if条件如果元素1 比元素2大该如何?
temp=${e[$j]} //把第一个元素值保存到临时变量中
e[$j]=${e[$[$j+1]]} //把第二个元素值保存到第一个元素中
e[$[$j+1]]=$temp //把临时变量(也就是第一个元素原值)保存到第二个元素值中
fi
done
done
echo "${e[*]}"
}
#array=(44 66 11 33 22 55 88 77) #定义数组
bbc=($(awk '{print $1}' arr.txt))
a=${bbc[*]}
d=(`test1 $a`)
#echo "${d[*]}"
for v in ${d[*]}
do
echo $v
执行脚本:
让文件里的数字竖着排序
arr.txt目录加的内容:
添加这几行代码:echo -n “$v空格” 设置输出为不换行输出,每个字符之间有空格,done下面加个echo 换行输出将特殊字符取消掉
让文件里的数字横着排序: