编写一个bash脚本来进行二进制搜索.将学生姓名和成绩从文件读入数组.提示用户输入学生姓名.在数组中找到名称并显示成绩.文件中的数据如下:
Ann:A Bob:C Cindy:B Dean:F Emily:A Frank:C Ginger:D Hal:B Ivy:A Justin:F Karen:D
我已经完成了以下操作,但我仍然坚持下一步该做什么
#!/bin/bash echo "please enter students Name: " read student echo "$student + $Grade" ((i=0)) while read students[$i] ; do ((i++)) done < students.dat first=0 last=$(students[@]) ((mid=0)) Name=`echo ${students[$mid]} | cut -d: -f1` Grade=`echo ${students[$mid]} | cut -d: -f2` echo $Name echo $Grade
二分搜索需要搜索的最大和最小边界.从零开始是很好的,但你的最后一个变量有点偏.尝试:last = $(($#students [@]} – 1)) – 1将使您的数组处于正确的大小(数组从零开始,并减少到它们的大小.)
原文链接:https://www.f2er.com/bash/387044.html之后尝试以下伪代码:
while (last is <= first) middle = midway point between first and last // make sure that your comparing just the names "Ann",// not your whole string "Ann:A" if (students[middle] == student) exit loop else if (students[middle] < student) first = middle + 1 else if (students[middle] > student) last = middle - 1
我在bash脚本方面不是很出色,所以我不会尝试修复(如果它甚至需要修复)你的大部分语法.如果你弄清楚语法,那么伪代码应该可以帮到你.