Arrays 气泡排序外壳,无输出
我遇到了一个问题,我试图在shell中使用冒泡排序,我不确定我的问题发生在哪里,因为我假设我的排序是正确的。我没有得到一个错误,但我根本没有排序的数字Arrays 气泡排序外壳,无输出,arrays,bash,shell,bubble-sort,Arrays,Bash,Shell,Bubble Sort,我遇到了一个问题,我试图在shell中使用冒泡排序,我不确定我的问题发生在哪里,因为我假设我的排序是正确的。我没有得到一个错误,但我根本没有排序的数字 #!/bin/bash array=( "$@" ) #echo ${array[@]} print all elements in the array if [ $# -gt 9 ] then echo Too many arguments, run the program over again exit fi j=0 f
#!/bin/bash
array=( "$@" )
#echo ${array[@]} print all elements in the array
if [ $# -gt 9 ]
then
echo Too many arguments, run the program over again
exit
fi
j=0
flag=1
a=${#array[@]}
for((j=0;j < $a - 1 && flag==1 ;j++))
do
flag=0
for((i=0; i< $a-j-1; i++))
do
x=${array[$i]}
y=${array[$i+1]}
if ((x>y))
then
flag=1
export temp=$x
export x=$y
export y=$temp
fi
done
done
echo "Sorted Array: " ${array[@]}
#/bin/bash
数组=(“$@”)
#echo${array[@]}打印数组中的所有元素
如果[$#-gt 9]
然后
回显太多参数,请重新运行程序
出口
fi
j=0
标志=1
a=${#数组[@]}
对于((j=0;j<$a-1&&flag==1;j++)
做
标志=0
(i=0;i<$a-j-1;i++)
做
x=${array[$i]}
y=${array[$i+1]}
如果((x>y))
然后
标志=1
出口温度=$x
出口x=$y
导出y=$temp
fi
完成
完成
echo“排序数组:${Array[@]}
正如注释中指出的,可以交换变量x
和y
,但不能交换任何数组项。而不是
x=${array[$i]}
y=${array[$i+1]}
if ((x>y)); then
flag=1
export temp=$x
export x=$y
export y=$temp
fi
写
更好的起点是使用
PS4=':$LINENO+'bash-x yourscript
观察运行时行为,记录执行的每个命令,找出脚本没有达到预期效果的第一个地方,然后编写一个更窄的问题,只反映shell部分的一个孤立的意外行为,不是(有效地)要求人们为你调试脚本。顺便说一句,导出
s有什么用?脚本的任何部分都不会修改数组
。你知道有排序
,所以这只是为了好玩,对吗?@Renardo如果((x>y))
部分是正确的。请注意双括号。谢谢,我甚至没有注意到这一点。这解决了我的问题
x=${array[$i]}
y=${array[$i+1]}
if ((x>y)); then
flag=1
array[$i]="$y"
array[$i+1]="$x"
fi