Bash脚本二进制搜索

前端之家收集整理的这篇文章主要介绍了Bash脚本二进制搜索前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
编写一个bash脚本来进行二进制搜索.将学生姓名和成绩从文件读入数组.提示用户输入学生姓名.在数组中找到名称显示成绩.文件中的数据如下:
  1. Ann:A
  2. Bob:C
  3. Cindy:B
  4. Dean:F
  5. Emily:A
  6. Frank:C
  7. Ginger:D
  8. Hal:B
  9. Ivy:A
  10. Justin:F
  11. Karen:D

我已经完成了以下操作,但我仍然坚持下一步该做什么

  1. #!/bin/bash
  2. echo "please enter students Name: "
  3. read student
  4. echo "$student + $Grade"
  5. ((i=0))
  6. while read students[$i] ; do
  7. ((i++))
  8.  
  9. done < students.dat
  10. first=0
  11. last=$(students[@])
  12.  
  13.  
  14. ((mid=0))
  15. Name=`echo ${students[$mid]} | cut -d: -f1`
  16. Grade=`echo ${students[$mid]} | cut -d: -f2`
  17. echo $Name
  18. echo $Grade
二分搜索需要搜索的最大和最小边界.从零开始是很好的,但你的最后一个变量有点偏.尝试:last = $(($#students [@]} – 1)) – 1将使您的数组处于正确的大小(数组从零开始,并减少到它们的大小.)

之后尝试以下伪代码

  1. while (last is <= first)
  2. middle = midway point between first and last
  3.  
  4. // make sure that your comparing just the names "Ann",// not your whole string "Ann:A"
  5. if (students[middle] == student)
  6. exit loop
  7. else if (students[middle] < student)
  8. first = middle + 1
  9. else if (students[middle] > student)
  10. last = middle - 1

我在bash脚本方面不是很出色,所以我不会尝试修复(如果它甚至需要修复)你的大部分语法.如果你弄清楚语法,那么伪代码应该可以帮到你.

猜你在找的Bash相关文章