`
xiaoming123123
  • 浏览: 101008 次
  • 性别: Icon_minigender_1
  • 来自: 南昌
社区版块
存档分类
最新评论

从数组中查找任何一个数字所在的位置(索引)

    博客分类:
  • J2SE
阅读更多
方式一:
/*
 * 从数组中查找9是在哪个位置,使用这种方式效率比较低
 */
package com.array;

public class ArraySearchTest {

	public static int search(int[] array, int value) {
		
		for(int i = 0; i < array.length; i++) {
			
			if(value == array[i]) {   //判断9是否与数组的索引相等
				return i;           //返回索引
			}
		}
		
		return -1;
	}
	
	public static void main(String[] args) {
		
		int[] a = new int[]{1,5,6,7,10,3,9};
		
		int value = 9;
		
		int index = search(a,value);
		
		System.out.println(index);
	}

}


总结:通过上面的查找方式发现,效率比较低,当数组元素是几千几万个的时候,要进行一个一个的比较,这种方式是非常低的;这种方式只适合,数组元素比较少的情况下,才适合

方式二:使用二分查找 高效查找数组元素的索引

二分查找法实现原理:
(1) 必须是有序的
(2) 将一组元素,一分为二

对1,3,5,6,7,8,10,12,15,16,19,22,23,25,27查找出25这个元素

分析:(1)这一组元素它总共是15个元素,一分为二之后,左边7个(1,3,5,6,7,8,10,),右边7个(15,16,19,22,23,25,27),中间就是第8个元素所对应的数字是12,因为12<25,所以把12之前的数字包括12本身全都过滤掉
(2)因为已经把12之前的数字包括12本身都过滤掉了,所以剩下15,16,19,22,23,25,27这7个元素,又把7一分为二,左边3个(15,16,19),右边3个(23,25,27),中间只剩下22,把22与25比较,因为22<25,所以把22之前的数字包括22本身过滤掉
(3) 最后只剩下23,25,27这三个元素,再一分为二,取中间元素25,就是我们要找的数字
请看下面代码:
package com.array;

public class ArraySearchTest1 {

	public static int binarySearch(int[] array,int value) {
		
		int low = 0;                   //low为数组下标的第一个元素
		int high = array.length - 1;  //high为数组下标最后一个元素
		int middle;                  //定义中间元素
		
		while(low <= high) {
			
			middle = (low + high) /2;    //取第一次中间的元素
			
			if(array[middle] == value) {
				return middle;
			}
			
			if(value < array[middle]) {
				high = middle - 1;
			}
			
			if(value > array[middle]) {
				low = middle + 1;
			}
		}
		
		return -1;
	}
	
	public static void main(String[] args) {

		int[] a = new int[]{1,3,5,6,7,8,10,12,15,16,19,22,23,25,27};
		
		int value = 25;
		
		int index = binarySearch(a,value);
		
		System.out.println(index);
	}

}

分享到:
评论
1 楼 q694119254 2012-08-07  
你个2人  数组没排序怎么办

相关推荐

    自定义数组中寻找最大元素位置

    本文将详细介绍如何通过编写Java程序,在一个二维数组中查找最大值及其位置。本程序适用于任何大小的数组,并能准确地返回最大值所在的行和列索引。 #### 程序结构分析 1. **类与方法定义**: - 定义了一个名为`...

    如何求最大值以及所在数组里的位置

    本文将详细介绍一个原创的C语言算法实现,该算法能够有效地找到数组中的最大值及其索引,并通过理解这个过程来帮助读者掌握算法思想,从而能够灵活运用到其他类似问题上。 #### 算法描述 本算法的目标是在给定的...

    查找数组中最接近与某值的元素 python

    6. **使用`heapq`模块**:Python的`heapq`模块提供了一个高效的最小堆,可以用来快速找到最接近的元素,但这种方法适用于动态查找,即在不断添加元素的情况下保持最接近元素的更新。 7. **使用`numpy`库**:对于...

    JS算法题之查找数字在数组中的索引位置

    在JavaScript编程中,解决“查找数字在数组中的索引位置”这一算法题目的关键是理解排序算法和数组操作。首先,我们需要实现一个函数`getIndexToIns`,它接收两个参数:一个数字数组`arr`和一个待查找的数字`num`。...

    数据结构中索引顺序表查找

    在索引顺序表中,通常会为每段数据创建一个索引表项,其中包含该段数据的起始位置以及其他相关信息(如最大值或最小值)。通过比较待查找的键值与索引表项中的信息,可以快速定位到目标数据所在的区域,从而减少不必...

    实验七 二维数组

    该代码实现了一个简单的功能,即找出一个给定的3x4矩阵中的最大值,并输出其值及所在的位置。 **例2:打印特定图案** ```c main() { char a[5] = {'*', '*', '*', '*', '*'}; int i, j, k; char space = ' '; ...

    uitableView 索引

    在实际应用中,`testTableView`可能是一个示例代码或项目,用于演示如何在UITableView中实现索引功能。通过查看和分析这些代码,开发者可以更好地理解上述知识点,并在自己的项目中应用。 总之,UITableView的数据...

    分段连续数字跳号查找

    2. **跳跃查找**:当需要查找一个值时,先与索引比较,确定目标值所在的段或可能所在的段,然后直接跳到该段进行查找,而不是逐个元素比较。 3. **段内查找**:在确定的段内,使用二分查找或其他高效的查找算法,...

    chazhao-.zip_查找_查找 算法_顺序折半分块

    顺序查找的实现相对简单,只需用一个循环遍历整个数组;折半查找则需要维护两个指针,分别指向数组的起始和结束,然后根据比较结果调整查找范围;分块查找则需要额外管理块的索引和内部排序。 文件"chazhao.txt"很...

    C++数值的查找提高练习.pptx

    另一个程序是关于二分查找的应用,它接收两个输入,一个是需要查找的数值n,另一个是数组的大小f。这个程序通过不断调整左右边界,找到目标值n应该处于的位置,输出的是目标值所在的索引。 最后一个题目是关于面试...

    分治算法求最大值与最小值,找最小元素

    分治算法是一种重要的计算机科学中的算法设计思想,它将一个复杂的问题分解成多个规模较小的相同或相似的子问题,然后分别解决这些子问题,最后将子问题的解合并得到原问题的解。这种策略有助于简化问题处理,提高...

    php使用array_search函数实现数组查找的方法

    它声明了一个包含多个整数的数组,并尝试查找数字8。如果找到,将输出该数字在数组中的键名;如果没有找到,则输出“没有找到”。这里`$found`变量实际上是8在数组中的键名,即3(因为数组索引从0开始)。 为了提高...

    c++各种查找排序算法的swf展示

    分块查找则是在大数组中利用小规模的有序块提高查找效率,通过索引先找到目标元素所在的块,再在该块内进行线性查找。 排序算法是编程中的另一大主题。归并排序是一种基于分治策略的算法,它将大问题分解为小问题,...

    高级语言程序设计:第五章 数组.ppt

    2. **查找最大值**:在一个二维数组中找到每行的最大值及其所在列的最小值: ```c for (i = 0; i ; i++) { int max_val = a[i][0], max_col = 0; for (j = 1; j ; j++) { if (a[i][j] &gt; max_val) { max_val = a...

    lookupvlookupmatchindex函数应用举例.doc

    例如,如果我们知道一个员工在数据表中的相对位置,可以通过MATCH找到这个位置,再用INDEX获取具体信息。 总的来说,LOOKUP、VLOOKUP、MATCH和INDEX函数都是Excel中强大的数据查询工具,它们可以根据不同的需求提供...

    08年程序员下午试题

    当一个数组遍历完后,将另一个数组剩余的元素直接添加到结果数组中。 试题二是一个C语言程序,用于生成名词的复数形式。这个程序运用了条件判断来处理不同的结尾情况。对于以'y'结尾的词,它会检查'y'前面的字符...

    C语言算法合集含最大公约数、最小公倍数、猴子吃桃子、百钱百鸡问题、渔夫打鱼问题、二分查找法、分块查找法、求水仙花数、统计单词个数

    将数据分成若干块,每块加载到内存,通过索引找到目标所在的块,再在块内进行顺序查找。这种方法结合了直接查找和顺序查找的优点。 7. **水仙花数**:水仙花数是指一个三位数,其各位数字立方和等于该数本身。例如...

    大厂面试系列二.pdf

    找出数组中第一个被修改过的数字问题,可以通过异或运算的性质来解决,即数组中所有元素和正常状态下的数组对应位置元素进行异或运算,结果为第一个被修改的数字。 设计DNS服务器中的Cache数据结构,需要综合考虑...

    Excel查找和引用函数.pdf

    如果reference为一个单元格区域,并且函数COLUMN作为水平数组输入,则COLUMN函数将reference中的列标以水平数组的形式返回。 实例:公式“=COLUMN(A3)”返回1,=COLUMN(B3:C5)返回2。 5. COLUMNS函数 COLUMNS函数...

    leetcode-cpp刷题

    - 实现思路:从右向左扫描数组,找到第一个下降位置,然后交换该位置及其右侧的最大值,最后将右侧部分反转。 - **2.1.13 Permutation Sequence** - 给定数字集合,返回第n个排列。 - 实现思路:利用数学方法...

Global site tag (gtag.js) - Google Analytics