编写程序实现顺序检索

编写程序实现顺序检索(采用两种方法实现)。

输入:升序排列的数组L,元素个数n,查找数x

输出:j,若x在L中,j是x首次出现的下标,否则,j等于0

源代码:

package com.company.deng;
import java.util.Scanner;

public class MainJianSuo {
    public static void main(String[] args) {

        //1. 编写程序实现顺序检索(采用两种方法实现)。
        //输入:升序排列的数组L,元素个数n,查找数x
        //输出:j,若x在L中,j是x首次出现的下标,否则,j等于0 FROM djj
        Scanner sc=new Scanner(System.in);
        System.out.printf("升序排列的数组L:");
        String str=sc.nextLine();
        String[] strs=str.split(" ");
        System.out.printf("元素个数n");
        int x=sc.nextInt();
        System.out.printf("查找数x");
        int n=sc.nextInt();
        int[] ints=new int[x];
        for(int i=0;i < x;i++) {
            ints[i]=Integer.parseInt(strs[i]);
        }
        int j=0;
        for(int i=1;i < x;i++) {
            if (n==ints[i]){
                j=i;
            }
        }
        System.out.println(j);
    }
}

运行结果截图:

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
题目描述: 定义一个整型数组r,用于存储关键码集合,其中r[1]~r[n]用于存储有效的关键码,r[0]留作它用,注意该数组按关键码有序。按照折半查找方法,查找在关键码集合中是否有符合给定值的记录,如果有,返回该记录所在数组下标,如果没有,返回0。要求输出查找过程,即输出每一轮的low,mid,high值,查找过程中需要比较的关键码值都输出。(数组的长度小于<100) -------------------------------------------------------------------------------- 输入样例: 10 2 3 5 6 8 9 11 17 44 58 5 17 4 -------------------------------------------------------------------------------- 输出样例: 1 5 10 8 1 2 4 3 3 3 4 5 3 1 5 10 8 6 8 10 17 8 1 5 10 8 1 2 4 3 3 3 4 5 0 -------------------------------------------------------------------------------- 输入描述: 各个命令以及相关数据的输入格式如下: 第一行输入关键码集合中关键码的数目,假设输入的值为n; 第二行输入n个关键码,以空格隔开,注意是整型; 接下来三行输入三个待查值. -------------------------------------------------------------------------------- 输出描述: 对于每个待查值,先输出查找待查值的比较过程,即输出找到之前每一轮low,mid,high值,以空格隔开,及与待查值相比较的所有的关键码值,每一轮占一行; 接下来如果找到待查值,输出位置下标,如果没找到,输出0.
### 回答1: 以下是两种实现方式: 方法一:使用内置函数 可以使用Python的内置函数`sorted`来实现升序排序和二分查找: ```python def search(L, n, x): sorted_L = sorted(L) # 升序排序 i = bisect.bisect_left(sorted_L, x) # 二分查找 return i if i != n and sorted_L[i] == x else -1 # 返回下标或者-1表示未找到 ``` 方法二:手动实现排序和二分查找 也可以手动实现排序和二分查找: ```python def sort(L): n = len(L) for i in range(n): for j in range(i + 1, n): if L[j] < L[i]: L[i], L[j] = L[j], L[i] # 冒泡排序 def search(L, n, x): for i in range(n): if L[i] == x: return i # 直接找到了,返回下标 return -1 # 未找到,返回-1 # 主程序 L = [5, 2, 7, 3, 9, 4, 6, 1, 8] n = len(L) x = 3 sort(L) print(search(L, n, x)) # 输出:3 ``` 其中,`sort`函数使用冒泡排序实现升序排序,`search`函数使用线性查找实现查找。需要注意的是,这种实现方式的时间复杂度较高,不适用于大规模数据。 ### 回答2: 首先,我们可以使用简单的线性顺序检索算法来实现。算法步骤如下: 1. 初始化变量j为0,用于存储查找数x首次出现的下标。 2. 从数组L的第一个元素开始遍历到最后一个元素: a. 如果当前元素等于查找数x,则将下标赋值给j,并跳出循环。 b. 如果当前元素大于查找数x,则跳出循环,因为数组L已经是升序排列。 3. 返回变量j作为结果。 另外一种方法是使用二分查找算法来实现顺序检索。二分查找算法的思想是将查找范围不断缩小为左半部分或右半部分,直到找到目标数为止。算法步骤如下: 1. 初始化变量j为0,用于存储查找数x首次出现的下标。 2. 初始化变量low为0,high为n-1,表示查找范围的起始和结束下标。 3. 当low小于等于high时,执行以下步骤: a. 计算中间下标mid,使mid等于low和high的平均值。 b. 如果数组L[mid]等于查找数x,则将mid赋值给j,并跳出循环。 c. 如果数组L[mid]大于查找数x,则将high赋值为mid-1。 d. 如果数组L[mid]小于查找数x,则将low赋值为mid+1。 4. 返回变量j作为结果。 这两种方法均可实现顺序检索,但二分查找算法在已经升序排列的数组中效率更高,因为它每次能将查找范围缩小一半。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

淸睇岱

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

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

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

打赏作者

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

抵扣说明:

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

余额充值