Linux Shell-Script代码没有按预期执行

时间:2013-08-18 10:50:29

标签: linux shell bubble-sort

冒泡排序:(原始代码)

clear
echo "Enter size : "
read size
echo "Enter elements : "
for (( i=0; i<size; i++ ))
do
    echo "Element " $i " : "
    read arr[$i]
done
m=$(($n-1))
for (( i=0; i<m; i++ ))
do
    cond=$((size-$i-1))
    for (( j=0; j<cond; j++ ))
    do
        l=$(($j+1));
        if [ ${a[$j]} -gt ${a[$l]} ]
        then
            tmp=${a[$j]}
            a[$j]=${a[$l]}
            a[$l]=$tmp
        fi
    done
done
echo "Sorted Data : "
echo ${a[*]}

此代码正在执行,它接受输入并将它们存储在数组中。 我看到的下一件事就是打印出“Sorted Array”。 之后没有打印任何元素。

尝试,sh -x sort.sh并且临时代码未被执行。 我是shell脚本的新手,无法理解错误。

冒泡排序:(更正代码)

clear
echo "Enter size : "
read size
echo "Enter elements : "
for (( i=0; i<size; i++ ))
do
    echo "Element " $i " : "
    read arr[$i]
done
m=$(($size-1))
for (( i=0; i<m; i++ ))
do
    cond=$(($size-$i-1))
    for (( j=0; j<cond; j++ ))
    do
        l=$(($j+1));
        if [ ${arr[$j]} -gt ${arr[$l]} ]
        then
            tmp=${arr[$j]}
            arr[$j]=${arr[$l]}
            arr[$l]=$tmp
        fi
    done
done
echo "Sorted Data : "
echo ${arr[*]}

2 个答案:

答案 0 :(得分:2)

您的计划中出现两件错误:

  1. 第8行 - 您正在调用数组arr[],但稍后将其称为a[]。更改其中一个名称以匹配另一个名称。
  2. 第10行 - 您的计划中没有$n。你的意思是$size。改变这一点。
  3. 我认为你的程序应该在此之后工作。

答案 1 :(得分:2)

问题1:你可以互换使用$ size和$ n。

问题2:你再次使用了arr []和[]数组。