1

冒泡排序:(原始代码)

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[*]}
4

2 回答 2

2

问题 1:您交替使用了 $size 和 $n。

问题 2:您再次交替使用了 arr[] 和 a[] 数组。

于 2013-08-18T12:11:09.897 回答
2

您的程序中有两件事是错误的:

  1. 第 8 行 - 您正在调用您的数组arr[],但后来将其称为a[]. 更改其中一个名称以匹配另一个名称。
  2. 第 10 行 -$n您的程序中没有。你的意思是$size。也改变这个。

我认为您的程序应该在此之后工作。

于 2013-08-18T11:37:57.233 回答