在数组中查找一个数并返回其下标

本文介绍了一种简单的线程查找算法及二分查找算法的Java实现。通过具体的代码示例,展示了如何在数组中查找指定元素,并返回其下标。线性查找适用于任意数组,而二分查找则针对有序数组,效率更高。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >




package algorithm.sort.dao;
/**
 * 在指定的数组中查找指定的元素并返回下标
 * */
public interface ThreadLookupAlgorithm {
//线程查找
public int find(int[] arr,int data);
//二分查找
public int findBinary(int[] arr,int left,int right,int data);
}

package algorithm.sort.imp;

import algorithm.sort.dao.ThreadLookupAlgorithm;

public class ThreadLookupAlgorithmImp implements ThreadLookupAlgorithm {

 //线性查找
 @Override
 public int find(int[] arr, int data) {
  for(int i = 0;i<arr.length;i++){
   if(data == arr[i]){
    return i;
   }
  }
  //习惯上使用-1表示查找失败
  return -1;
 }
 //二分查找
 @Override
 public int findBinary(int[] arr, int left, int right, int data) {
  //数组中至少有1个元素才需要查找
  if(left <= right){
   //1.计算中间的下标并记录
   int p = (left+right)/2;
   //2.使用目标元素与中间元素比较大小,若相等则直接返回下标代表查找成功
   if(data == arr[p]){
    return p;
   }
   //3.若目标元素小于中间元素,则去中间元素的左边查找,重复上述过程,使用递归
   else if(data < arr[p]){
    return findBinary(arr, left, p-1, data);
   }
   //4.若目标元素大于中间元素,则去中间元素的右边查找
   else{
    return findBinary(arr, p+1, right, data);
   }
  }
  //若执行到left不再小于等于right时,表示查找失败
  return -1;
 }

}

package com.fl.test;

import algorithm.sort.dao.ThreadLookupAlgorithm;
import algorithm.sort.imp.ThreadLookupAlgorithmImp;

public class LookupAlgorithm {

 public static void main(String[] args) {
  
  ThreadLookupAlgorithm threadLookupAlgorithm = new ThreadLookupAlgorithmImp();
  int[] brr ={10,20,30,40,50};
  int num = 10,number = 30;
  int res1 = threadLookupAlgorithm.findBinary(brr, 0, 4, number);
  int res = threadLookupAlgorithm.find(brr, num);
  if(res != -1){
   System.out.println(num+"在数组中出现的位置是:"+res);
  }else{
   System.out.println(num+"在数组中不存在!");
  }
  if(res != -1){
   System.out.println(num+"在数组中出现的位置是:"+res1);
  }else{
   System.out.println(num+"在数组中不存在!");
  }
 }

}



在C++中,如果你有一个已经部分或完全有序的数组,你可以使用二分查找(Binary Search)算法来高效地找到一个特定元素的索引。对于已排序的数组,二分查找的时间复杂度为O(log n),效率非常高。 以下是一个简单的示例,展示了如何在一个升序排列的整数组查找一个给定值的索引: ```cpp #include <iostream> // 定义二分查找 int binarySearch(const std::vector<int>& arr, int target) { int left = 0; int right = arr.size() - 1; while (left <= right) { int mid = left + (right - left) / 2; // 使用更安全的计算中间位置的方法 if (arr[mid] == target) { // 找到目标值 return mid; } else if (arr[mid] < target) { // 目标在右半部分 left = mid + 1; } else { // 目标在左半部分 right = mid - 1; } } // 如果没有找到,返回 -1 表示不存在 return -1; } int main() { std::vector<int> sortedArray = {1, 2, 3, 4, 5, 6, 7, 8, 9}; int searchValue = 5; int index = binarySearch(sortedArray, searchValue); if (index != -1) { std::cout << "Element found at index: " << index << std::endl; } else { std::cout << "Element not found in the array." << std::endl; } return 0; } ``` 在这个例子中,`binarySearch` 函接受一个有序数组 `arr` 和一个查找的目标值 `target`。如果找到了目标值,它会立即返回该值的索引;如果没有找到,则返回 `-1`。 如果你对这个概念还有疑问,或者想了解其他类型的数组排序算法(比如冒泡排序、快速排序等),随时告诉我。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值