找X(简单查找)


Problem Link:点击打开链接


题目描述

输入一个数n,然后输入n个数值各不相同,再输入一个值x,输出这个值在这个数组中的下标(从0开始,若不在数组中则输出-1)。 
输入描述:
测试数据有多组,输入n(1<=n<=200),接着输入n个数,然后输入x。


输出描述:
对于每组输入,请输出结果。

输入例子:
2
1 3
0

输出例子:
-1

AC code:

#include<iostream>
#include<algorithm>
#include<stdio.h>
#include<string.h>
#include<math.h>
#include<queue>
#include<set>
#include<map>

using namespace std;


int main()
{
//  freopen("D:\\in.txt","r",stdin); 
    int x,i,n;
    int a[222];
    while(scanf("%d",&n)!=EOF)
    {
        for(i=0;i<n;++i)
        {
            scanf("%d",&a[i]);
        }
        scanf("%d",&x);
        for(i=0;i<n;++i)
        {
            if(a[i]==x)
            {
                printf("%d\n",i);
                break;
            }
        }
        if(i==n)
            printf("-1\n");
    }
	return 0;
 } 


### 如何在顺序表(数组)中搜索指定元素x的索引及其实现方法 #### 方法一:暴力查找 暴力查找是一种简单直观的方法,通过逐一比较数组中的每一个元素与目标值 `x` 是否相等来完成搜索。这种方法的时间复杂度为 O(n),其中 n 是数组长度。 以下是基于 C 语言实现的暴力查找代码: ```c #include <stdio.h> int linear_search(int arr[], int size, int x) { for (int i = 0; i < size; i++) { if (arr[i] == x) { // 如果到匹配项 return i; // 返回当前索引 } } return -1; // 若未到返回-1 } int main() { int arr[] = {1, 2, 3, 4, 5}; int size = sizeof(arr) / sizeof(arr[0]); int x = 3; int index = linear_search(arr, size, x); if (index != -1) { printf("Element %d found at index %d.\n", x, index); // 输出结果 [^4] } else { printf("Element not found.\n"); } return 0; } ``` #### 方法二:二分查找 对于已排序的顺序表(数组),可以采用效率更高的 **二分查找** 算法。此算法每次将搜索区间减半,从而显著减少所需比较次数。时间复杂度为 O(log n)。 以下是基于 C 语言实现的二分查找代码: ```c #include <stdio.h> // 定义二分查找函数 int binary_search(int arr[], int size, int x) { int low = 0, high = size - 1; while (low <= high) { int mid = low + (high - low) / 2; // 防止溢出的方式计算中间位置 if (arr[mid] == x) { // 到目标值 return mid; // 返回索引 } else if (arr[mid] < x) { // 目标值位于右半部分 low = mid + 1; } else { // 目标值位于左半部分 high = mid - 1; } } return -1; // 未到目标值 } int main() { int arr[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; // 已排序数组 int size = sizeof(arr) / sizeof(arr[0]); int x = 7; int index = binary_search(arr, size, x); if (index != -1) { printf("Element %d found at index %d using Binary Search.\n", x, index); // 结果输出 [^1] } else { printf("Element not found.\n"); } return 0; } ``` 上述两种方法分别适合不同的场景。当数组无序时,只能使用暴力查找;而当数组有序时,推荐优先考虑二分查找以提高性能。 --- ### 数据结构视角下的分析 顺序表本质上是一个连续存储空间内的线性表实例化形式[^3]。因此,在顺序表上执行查找操作实际上是针对一段内存区域的操作。无论是暴力查找还是二分查找,都需要依赖于这一特性来进行高效访问。 需要注意的是,顺序表支持随机存取,这意味着可以通过索引直接定位任意位置上的元素,这是其能够支持高效查找的基础条件之一。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

林下的码路

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值