微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

冒泡排序bash脚本

如何解决冒泡排序bash脚本

我正在尝试使用冒泡排序按bash的字典顺序对名称及其分数列表进行排序。数组是

Ted 86
Anthony 70
Mark 95
Kyle 65
David 75

名称存储在数组名称中,分数存储在数组分数中

这是我的代码,它在第30行给我一个错误,说“有很多参数”,我似乎找不到原因。

#! /bin/bash
inputfile="$1"

if [[ !(-f "$1") ]]; then
    echo "$1 must be a file"
    exit 1
else
    echo "$1 is a file"
fi

names=()
scores=()

while IFS= read -r name score
do
    names+=( "$name" )
    scores+=( "$score" )
done < $inputfile
echo "The arrays before sorting"

for (( i=0; i<${#names[@]}; ++i ))
do
    echo "${names[$i]} ${scores[$i]}"
done

echo "The sorted arrays using bubble sort"
for (( i = 0; i < ${#names[@]}; i++ ))
do
    for (( j = $i; j < ${#names[@]}; j++ ))
    do
            if [ ${names[$i]} -gt ${names[$j]} ]; then #error here
                    t=${names[$i]}
                    names[$i]=${names[$j]}
                    names[$j]=$t
            fi
    done
done

for (( i=o; i<${#names[@]}; ++i ))
do
    echo "${names[$i]}"
done

有人可以复制并粘贴以查看是否遇到相同的问题吗?

解决方法

IFS =时读取-r名称分数

是错误的。使用IFS=时,不会拆分任何单词-整行分配给name,而score始终为空。

我似乎找不到原因。

由于您向[传递了多个参数,因此扩展为i=0 j=1之前的值:

# if [ ${names[$i]} -gt ${names[$j]} ]
# expands to:
if [ Ted 86 -gt Anthony 70 ]

没有[程序接收6个参数,并且不知道如何处理它们-因此它退出并出现错误。解决上述IFS问题时-仍在将名称作为数字-gt进行比较-我猜您的意思是按人员对他们进行排序分数而不是名称。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?