方式一:
/*
* 从数组中查找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);
}
}
分享到:
相关推荐
本文将详细介绍如何通过编写Java程序,在一个二维数组中查找最大值及其位置。本程序适用于任何大小的数组,并能准确地返回最大值所在的行和列索引。 #### 程序结构分析 1. **类与方法定义**: - 定义了一个名为`...
本文将详细介绍一个原创的C语言算法实现,该算法能够有效地找到数组中的最大值及其索引,并通过理解这个过程来帮助读者掌握算法思想,从而能够灵活运用到其他类似问题上。 #### 算法描述 本算法的目标是在给定的...
6. **使用`heapq`模块**:Python的`heapq`模块提供了一个高效的最小堆,可以用来快速找到最接近的元素,但这种方法适用于动态查找,即在不断添加元素的情况下保持最接近元素的更新。 7. **使用`numpy`库**:对于...
在JavaScript编程中,解决“查找数字在数组中的索引位置”这一算法题目的关键是理解排序算法和数组操作。首先,我们需要实现一个函数`getIndexToIns`,它接收两个参数:一个数字数组`arr`和一个待查找的数字`num`。...
在索引顺序表中,通常会为每段数据创建一个索引表项,其中包含该段数据的起始位置以及其他相关信息(如最大值或最小值)。通过比较待查找的键值与索引表项中的信息,可以快速定位到目标数据所在的区域,从而减少不必...
该代码实现了一个简单的功能,即找出一个给定的3x4矩阵中的最大值,并输出其值及所在的位置。 **例2:打印特定图案** ```c main() { char a[5] = {'*', '*', '*', '*', '*'}; int i, j, k; char space = ' '; ...
在实际应用中,`testTableView`可能是一个示例代码或项目,用于演示如何在UITableView中实现索引功能。通过查看和分析这些代码,开发者可以更好地理解上述知识点,并在自己的项目中应用。 总之,UITableView的数据...
2. **跳跃查找**:当需要查找一个值时,先与索引比较,确定目标值所在的段或可能所在的段,然后直接跳到该段进行查找,而不是逐个元素比较。 3. **段内查找**:在确定的段内,使用二分查找或其他高效的查找算法,...
顺序查找的实现相对简单,只需用一个循环遍历整个数组;折半查找则需要维护两个指针,分别指向数组的起始和结束,然后根据比较结果调整查找范围;分块查找则需要额外管理块的索引和内部排序。 文件"chazhao.txt"很...
另一个程序是关于二分查找的应用,它接收两个输入,一个是需要查找的数值n,另一个是数组的大小f。这个程序通过不断调整左右边界,找到目标值n应该处于的位置,输出的是目标值所在的索引。 最后一个题目是关于面试...
分治算法是一种重要的计算机科学中的算法设计思想,它将一个复杂的问题分解成多个规模较小的相同或相似的子问题,然后分别解决这些子问题,最后将子问题的解合并得到原问题的解。这种策略有助于简化问题处理,提高...
它声明了一个包含多个整数的数组,并尝试查找数字8。如果找到,将输出该数字在数组中的键名;如果没有找到,则输出“没有找到”。这里`$found`变量实际上是8在数组中的键名,即3(因为数组索引从0开始)。 为了提高...
分块查找则是在大数组中利用小规模的有序块提高查找效率,通过索引先找到目标元素所在的块,再在该块内进行线性查找。 排序算法是编程中的另一大主题。归并排序是一种基于分治策略的算法,它将大问题分解为小问题,...
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] > max_val) { max_val = a...
例如,如果我们知道一个员工在数据表中的相对位置,可以通过MATCH找到这个位置,再用INDEX获取具体信息。 总的来说,LOOKUP、VLOOKUP、MATCH和INDEX函数都是Excel中强大的数据查询工具,它们可以根据不同的需求提供...
当一个数组遍历完后,将另一个数组剩余的元素直接添加到结果数组中。 试题二是一个C语言程序,用于生成名词的复数形式。这个程序运用了条件判断来处理不同的结尾情况。对于以'y'结尾的词,它会检查'y'前面的字符...
将数据分成若干块,每块加载到内存,通过索引找到目标所在的块,再在块内进行顺序查找。这种方法结合了直接查找和顺序查找的优点。 7. **水仙花数**:水仙花数是指一个三位数,其各位数字立方和等于该数本身。例如...
找出数组中第一个被修改过的数字问题,可以通过异或运算的性质来解决,即数组中所有元素和正常状态下的数组对应位置元素进行异或运算,结果为第一个被修改的数字。 设计DNS服务器中的Cache数据结构,需要综合考虑...
如果reference为一个单元格区域,并且函数COLUMN作为水平数组输入,则COLUMN函数将reference中的列标以水平数组的形式返回。 实例:公式“=COLUMN(A3)”返回1,=COLUMN(B3:C5)返回2。 5. COLUMNS函数 COLUMNS函数...
- 实现思路:从右向左扫描数组,找到第一个下降位置,然后交换该位置及其右侧的最大值,最后将右侧部分反转。 - **2.1.13 Permutation Sequence** - 给定数字集合,返回第n个排列。 - 实现思路:利用数学方法...