题目描述已知一维数组中的10个元素各不相同,查找数组中是否存在值为key的数组元素。如果有,输出相应的下标,否则输出not found。

#include"stdio.h"
int search(int a[],int n,int key);  //n表示数组元素个数,key表示要查找的数据
main()
{
   int i,r,b[10],key;
   for(i=0;i<10;i++)
   {
      scanf("%d",&b[i]);
   }
   scanf("%d",&key);
     r=search(b,i,key);     //函数调用
   if(  r!=-1)
      printf("%d\n",r);
   else
      printf("not found\n");
}

int search(int a[],int n,int key){
        int m;
        m=-1;
    for(int i=0;i<n;i++)
    {
          if (key==a[i])
          { 
           m=i;
          }
      }
return m;}

样例输入

6 70 -9 80 83 54 3 88 10 2 80

样例输出

3

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 可以使用线性查找的方法,在数组中逐个比较元素,如果找到了值为key元素,就输出相应下标。如果遍历完整个数组都没有找到,就输出not found。由于数组无序排列,所以无法使用二分查找等更快的算法。 ### 回答2: 这题需要使用线性查找算法,即逐个遍历数组中元素,并与key进行比较,直到找到相同的元素或者遍历完整个数组仍未找到相同元素。下面是具体流程: 1. 遍历数组,遍历范围从0到n-1(n为数组长度)。 2. 每次遍历后,将数组中元素key做比较,如果相同,则输出元素下标,退出程序。如果遍历完整个数组仍未找到相同元素,则输出not found。 下面给出一个示例代码: ```java public static void search(int[] arr, int key) { for (int i = 0; i < arr.length; i++) { if (arr[i] == key) { System.out.println(i); return; } } System.out.println("not found"); } ``` 其,arr表示待查找的数组,key表示所要查找元素值。这个函数输出的是key所在的下标(从0开始),如果找不到,则输出not found。 需要注意的是,该算法的时间复杂度为O(n),如果数组中有大量重复元素,可以使用其他更加高效的算法,如二分查找等。 ### 回答3: 对于这个问题,一般有两种解决方法:线性查找和二分查找。 线性查找是一种简单的查找方法,适用于无序数组。具体实现步骤如下: 1.从数组的第一个元素开始逐个比较,直到找到目标元素或比目标元素大的元素。 2.如果找到目标元素,则直接返回该元素下标。 3.如果比目标元素大的元素,则说明该元素不存在于数组中,返回not found。 代码实现: int linear_search(int arr[], int key) { for (int i=0; i<10; i++) { if (arr[i] == key) { return i; } if (arr[i] > key) { break; } } return -1; } 二分查找是一种更高效的查找方法,适用于有序数组。具体实现步骤如下: 1.将数组按照升序排列。 2.从数组的元素开始比较,如果该元素等于目标元素,则直接返回该元素下标。 3.如果该元素比目标元素大,则在数组的左半部分继续查找,即再次执行步骤2。 4.如果该元素比目标元素小,则在数组的右半部分继续查找,即再次执行步骤2。 5.如果找不到目标元素,则返回not found。 代码实现: int binary_search(int arr[], int key) { int left = 0, right = 9, mid; while (left <= right) { mid = (left + right) / 2; if (arr[mid] == key) { return mid; } if (arr[mid] > key) { right = mid - 1; } else { left = mid + 1; } } return -1; } 无论使用哪种查找方法,都需要注意数组必须无序排列或升序排列,否则会得到错误的结果。同时,如果数组中有多个相同的元素,只会返回其一个的下标,而不能返回所有的下标
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值