利用函数对数组进行冒泡排序------------两种方法

方法1:

在对数组进行冒泡排序时,无需进入脚本修改调用的数组名,只需要在脚本执行时在其后加上位置变量$1(数组文件名)即可

1.创建一个文件,写入一组无规律排序的数字,通过调用函数的方式对该文件内的数字进行排序。

[root@localhost ~]# vi 1.txt 
22
55
11
44
66
88
77
33

2.创建脚本

[root@localhost ~]# vi hanshumaopao.sh
#!/bin/bash
myarray () {
array=(`echo $@`)
a=${#array[*]}
for ((i=1; i<$a; i++))  #比较轮数为数组长度减1,从1开始
do
  for ((j=0; j<$a-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[*]}    #输出排序后的数组
}

path=`pwd`   #获取当前所在位置
newpath=$path/newfile.txt    #赋值新变量,获取需要排序的文件名的位置,这里的文件名非固定的,是变量
if [ -f $1 ];then    #$1代表文件,获取文件位置,判断此文件名是否是需要的文件,如果是,则直接调用
  file=`cat $1`
else
  file=`cat $path/$1`    #如果不是要查找的文件,则通过PATH继续查找
fi
for value in $file    #在file文件中调取数据
do
echo -n " $value" >> $newpath   #将调用的数字按照横序排列,且每个数字间隔一个空格,最后将所有调用的数字追加到变量文件中
done
arr=(`cat $newpath`)     #定义新数组的数字是从变量文件中获取到的
echo "原始数组为:${arr[*]}"
result=`myarray ${arr[*]}`    #调用函数对数组进行冒泡排序
rm -rf $newpath   #排序完成后,需要对变量文件中的数据删除,以便再对其他数组排序时,数据产生冲突
echo "排序后数组为:$result"
[root@localhost ~]# . hanshumaopao.sh 1.txt 
原始数组为:22 55 11 44 66 88 77 33
排序后数组为:11 22 33 44 55 66 77 88

方法2:

在对数组进行冒泡排序时,需要在脚本中指定需要排序的数组名或文件名,此方法在每次排序不同数组时,需要重新修改文件名

1.创建一个文件,方法同方法1

2.创建脚本

[root@localhost ~]# vi hanshumaopao1.sh 
#!/bin/bash
myarray() {
array=(`echo $@`)
#echo ${array[*]}
a=${#array[*]}
for ((i=1; i<$a; i++))
do
  for ((j=0; j<$a-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[*]}
}
i=0    #i指位置参数,从0开始
file=`cat 1.txt`   #定义新变量并写入需要排序的文件名
for value in $file
do
  arr1[$i]=$value  #定义新变量,是从1.txt里取数据,根据位置变量逐一获取
  let i++      #每次位置变量加1
done
echo "原始数组为:${arr1[*]}"
result=`myarray ${arr1[*]}`
echo "排序后数组为:$result"
[root@localhost ~]# ./hanshumaopao.sh 1.txt 
原始数组为:22 55 11 44 66 88 77 33
排序后数组为:11 22 33 44 55 66 77 88
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值