数组查找

对于一维数组,通常会用到以下查找方法,来查找数组中是否存在某个元素。

(一)逐个元素对比,找出要查找的对象

public static int search(int[] array, int value)
{
          for(int i = 0; i< array.length; i++)
          {
               if(value == array[i])
               {
                    return i;
                }
          }

          return -1;
}

public static void main(Srting[] args)
{
          int[] a = new int[]{1, 5, 3, 7 ,2 ,10,11,4};
          int value = 9;
          int index = search(a, value);
          System.out.println(index);
}

上述代码,查找数组a中值为9的元素的位置,由于a中没有9,所以返回-1

(二)使用二分法查找对象

在使用二分法查找时,必须先为数组排序。

折半查找法也称为二分查找法:它的基本思想是,将n个元素分成个数大致相同的两半,取a[n/2]与欲查找的x作比较,如果x=a[n/2]则找到x,算法终止。如 果x<a[n/2],则我们只要在数组a的左半部继续搜索x(这里假设数组元素呈升序排列)。如果x>a[n/2],则我们只要在数组a的右 半部继续搜索x。

二分查找的方法可以这样写:

时间: 2024-11-08 11:15:43

数组查找的相关文章

leetcode——Search a 2D Matrix 二维有序数组查找(AC)

Write an efficient algorithm that searches for a value in an m x n matrix. This matrix has the following properties: Integers in each row are sorted from left to right. The first integer of each row is greater than the last integer of the previous ro

leetcode 题解:Search in Rotated Sorted Array II (旋转已排序数组查找2)

题目: Follow up for "Search in Rotated Sorted Array":What if duplicates are allowed? Would this affect the run-time complexity? How and why? Write a function to determine if a given target is in the array. 说明: 1)和1比只是有重复的数字,整体仍采用二分查找 2)方法二 : 实现:  

leetcode题解:Search in Rotated Sorted Array(旋转排序数组查找)

题目: Suppose a sorted array is rotated at some pivot unknown to you beforehand. (i.e., 0 1 2 4 5 6 7 might become 4 5 6 7 0 1 2). You are given a target value to search. If found in the array return its index, otherwise return -1. You may assume no du

leetcode旋转数组查找 二分查找的变形

http://blog.csdn.net/pickless/article/details/9191075 Suppose a sorted array is rotated at some pivot unknown to you beforehand. (i.e., 0 1 2 4 5 6 7 might become 4 5 6 7 0 1 2). You are given a target value to search. If found in the array return it

PHP性能笔记:PHPExcel 与数组查找

使用 PHPExcel 导入数据,sheet 对象的 getCellByColumnAndRow 比 getCell 性能稍高,对于 1500 行的 Excel 数据,大概快 200 毫秒. 对于数组查找,应当尽可能转换为 isset 操作,避免 in_array 或 array_search 操作,在一个 10W 个元素的数组中查找 1W 个值,isset 操作仅 3 毫秒,in_array, array_search 为 14.5 秒,array_flip 交换健值仅 25 毫秒.

蓝桥杯 算法训练 ALGO-50 数组查找及替换

算法训练 数组查找及替换 时间限制:1.0s   内存限制:512.0MB 问题描述 给定某整数数组和某一整数b.要求删除数组中可以被b整除的所有元素,同时将该数组各元素按从小到大排序.如果数组元素数值在A到Z的ASCII之间,替换为对应字母.元素个数不超过100,b在1至100之间. 输入格式 第一行为数组元素个数和整数b 第二行为数组各个元素 输出格式 按照要求输出 样例输入 7 2 77 11 66 22 44 33 55 样例输出 11 33 55 M 示例代码: 1 #include<

.net字符串数组查找方式效率比较

下面是代码: static void Main(string[] args) { string[] arr = new string[] { "AAA", "BBBB", "CCCC", "DDDD", "EEEEEE", "ffffff", "ggggggg", "hhhhhh", "iii", "", &

KT学算法(二)——循环有序数组查找指定元素

问题描述 一个循环有序的数组是形如:"12,16,18,20,41,100,1,4,6,9" 这样的数组. 问题分析 对于循环有序数组,一种简单的定义是: 循环有序数组是将一个有序数组切成两段,并交换位置得到引用块内容 比如现将1,4,6,9,12,16,18,20,41,100在9和12处切分,得到两段:1,4,6,9和12,16,18,20,41,100,再交换这两段的位置就得到了一开始的循环有序数组. 另一种比较严格的定义是: 对于一个循环有序数组{A1,A2,--An},存在一

[ALGO-50] 数组查找及替换

算法训练 数组查找及替换 时间限制:1.0s   内存限制:512.0MB 问题描述 给定某整数数组和某一整数b.要求删除数组中可以被b整除的所有元素,同时将该数组各元素按从小到大排序.如果数组元素数值在A到Z的ASCII之间,替换为对应字母.元素个数不超过100,b在1至100之间. 输入格式 第一行为数组元素个数和整数b 第二行为数组各个元素 输出格式 按照要求输出 样例输入 7 2 77 11 66 22 44 33 55 样例输出 11 33 55 M 说明:蓝桥杯官网上的"样例输入&q

[LeetCode]26. Search in Rotated Array II旋转数组查找II

Follow up for "Search in Rotated Sorted Array":What if duplicates are allowed? Would this affect the run-time complexity? How and why? Write a function to determine if a given target is in the array. 解法:同旋转数组查找I,本题也使用二分查找,只是在nums[mid]和nums[right