加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

Bash脚本二进制搜索

发布时间:2020-12-15 19:00:40 所属栏目:安全 来源:网络整理
导读:编写一个bash脚本来进行二进制搜索.将学生姓名和成绩从文件读入数组.提示用户输入学生姓名.在数组中找到名称并显示成绩.文件中的数据如下: Ann:ABob:CCindy:BDean:FEmily:AFrank:CGinger:DHal:BIvy:AJustin:FKaren:D 我已经完成了以下操作,但我仍然坚持下一
编写一个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将使您的数组处于正确的大小(数组从零开始,并减少到它们的大小.)

之后尝试以下伪代码:

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读