练习2—数据查找
题目
有一组数12,56,45,78,90,80,23,16,8,63 保存在一个数组中,从键盘任意接收一个数,并在数组中查找该数给出是否找到的信息。如果找到了,要求输出该数在数组中所处的位置;如果找不到,输出没有找到的提示信息。
解题步骤
(1)接收;
(2)查找数据;
(3)对比;
(4)输出结果;
Java
1 | import java.util.Scanner; |
C语言
顺序查找
1 |
|
- 本题关于“未找到信息的输出”,我们还可以这样想:如果一组数据,比对到最后一个都没有满足条件的,那么就认定为队列中没有该数据。
- 用这样的思想我们可以进行这样的改动:删除Tag标签,增加条件判断直接输出。这里注意变量
i
的自增,为了在i=10
时仍能进入循环输出信息,判断条件应修改为i <= 10
。
1 |
|
说明
- 本题中最重要的是如何将已有数据和用户输入数据进行对比,也就是 “查找” 这一操作,代码1给出的是查找算法中最简单的 “顺序查找” 。
- 由于每次进入循环,变量
i
依次自增、逐个查找,如果我们仅仅只将单一的输出信息放在语句中而不进行其它判断的话,就会造成输出错误。所以增加变量Tag
用于判断条件:如果数据相等(找到了),Tag
值置 1 。如果没有找到,Tag
值置0,循环外进行一次判断输出没有找到的提示信息。- 我竟然试图用二分法解决,但是却忽略了使用二分(折半)查找的前提必须是有序表顺序存储。这里给出两种版本的二分法,注意算法适用条件。
二分查找
1 | int Search1(int a[], int value, int n) |