mysql 二分查找 java、php 二分查找
本文内容列表:
- 1.二分查找的Java代码
- 2. Java中的二分查找是什么?
- 3、java中的二分查找方法是什么?
二分查找的Java代码
public class ef {
public static void main(String[] args) {
int[] a = { 4, 8, 12, 44, 69, 71, 98, 132 ,133}; int m = ef.ef(a, 0, a.length, 71);
if(m!=-1){
System.out.println(a[m]+"=== =="+m);
}
System.out.println("该号码不存在");
}
public static int ef(int[] a, int from, int to , int b) {
int midel= (from + to) / 2;
if ((to - from) = 1 b != a[midel]) {
return -1;
}
if (b a[midel]) {
return ef(a, midel, to, b);
} else if (b a[midel]) {
return ef(a, from , midel, b);
} else {
return midel;
}
}
}
java 什么是二分查找?
什么是二分查找?
二分查找又称为二分查找,是一种效率更高的查找方法。但二分查找要求线性表必须采用顺序存储结构,表中的元素必须按关键字排序。
二分查找的优缺点
优点是比较次数少,查找速度快,平均性能好;
缺点是要查找的表必须是有序表,插入和删除比较困难。
因此,二分查找法适用于不经常变化,但查找频繁的有序列表。
使用条款:搜索序列是顺序结构,是有序的。
流程
首先,假设表格中的元素按升序排列,将表格中间记录的关键字与搜索词进行比较。如果两者相等,则查找成功;否则,使用中间位置记录将表拆分为两个子表,第一个和最后一个。如果中间位置注册的关键字大于搜索词,则继续搜索上一个子表,否则继续搜索下一个子表。重复上述过程,直到找到符合条件的记录,则查找成功,或者直至子表不存在,则查找失败。
使用循环实现二分查找
public class BinarySearch {
public static void main(String[] args) {
//生成随机数组 int[] array = suiji();
//对随机数组进行排序 Arrays.sort(array);
System.out.println("生成的随机数组为:" + Arrays.toString(array));
System.out.println ("要搜索的值:");
Scanner input = new Scanner(System.in);
//要搜索的目标值 int goal = input.nextInt();
//使用二分查找 int index = binarySearch(array, aim);
System.out.println("要查找的值的索引位置:" + index);
}
/** * 生成一个随机数组 *
* @return 返回值,返回一个随机数组 */
private static int[] suiji() {
// random.nextInt(n)+m 返回 m 到 m+ n-1 int n = new Random().nextInt(6) + 5;
int[] array = new int[n];
//循环遍历并给数组赋值 for (int i = 0; i array.length ; i++) {
array[i] = new Random().nextInt(100);
}
返回数组;
}
/** * 二分查找 --- 循环实现 *
* @param array 要搜索的数组 * @param goal 要搜索的值 * @return 返回值,成功时返回索引,- 1 时返回错误*/? int mid;
while (left = right) {
mid = (left + right) / 2;
//如果搜索值小于中间值,则整个前半部分搜索范围将作为 New SearchRange if (target array[mid]) {
right = mid - 1;
//如果搜索值大于中间值,则为整个搜索范围的后半部分将作为新的搜索范围 } else if (aim array[mid]) {
left = mid + 1;
//如果搜索数据正好等于中间元素值,则返回中间元素值 } else {
return middle ;
}
}
return -1;
}}
运行结果演示:
F from 知道如果数据查找是否在数组中,然后打印该数据在数组中的索引;如果不存在,则打印-1,即打印-1,则说明该数字在数组中不存在,反之亦然。
4。使用递归实现二分查找
public class BinarySearch2 {
public static void main(String[] args) {
//生成随机数组 int[] array = suiji( );
//对随机数组进行排序 Arrays.sort(array);
System.out.println("生成的随机数组为:" + Arrays.toString(array));
System.out.println("要搜索的值:");
Scanner input = new Scanner(System.in);
//要搜索的目标值 int aim = input.nextInt( );
// 使用二分查找 int index = binarySearch(array, aim, 0, array.length - 1);
System.out.println("要查找的值的索引位置:" + index );
}
/** * 生成随机数组 * * * @return return value 返回随机数组 */
private static int[] suiji() {
// Random. nextInt(n)+ m 返回 m 到 m+n-1 之间的随机数 int n = new Random().nextInt(6) + 5;
int[] array = new int[n];
// 循环遍历 给数组赋值 for (int i = 0; i array.length; i++) {
array[i] = new Random().nextInt(100);
}
return array;
}
/** * 二分查找 ---递归方法 * * * @param array 要查找的数组 * @param goal 要查找的值 * @param left 上的最小值left * @param right 右边的最大值 * @return 返回值,成功则返回索引,失败则返回-1 */
private static int binarysearch(int[] array, int aim, int left, int right ) {
if (aim array [left] || Target group [right]) {
return -1;
}
//求中间值 int mid = (left + right)/ 2;
if(array[mid]==aim){
return mid;
} else if(array[mid]aim){
//如果中间值大于你要找的值,从左半部继续递归 return binarySearch(array, aim, left, mid - 1);
} else {
//如果中间值小于要找的值,则从继续递归右半部分 return binarySearch(array, target, middle + 1, matrix.length-1);
}
}}
运行结果演示:
总结:
与循环相比,递归代码更简单,但占用时间和空间较多,效率较低。低的。在实际学习和工作中,根据情况选择使用。通常我们如果用循环来实现代码的话,只要不是太麻烦,我们就选择循环来实现~
java中的二分查找方法是什么
1。算法概念。
二分查找算法也称为半查找、二分查找。它是一种用于在有序数组中查找特定元素的搜索算法。请注意,该算法基于有序数组。
2。算法思维。
①搜索过程从矩阵的中间元素开始。如果中间元素正好是要查找的元素,则查找过程结束;
②如果特定元素大于或小于中间元素,则当数组大于或小于中间元素时,查找过程结束,查找小于中间元素的一半,和之前一样从中间元素开始比较。
③如果在特定步骤矩阵为空,则表示找不到。
此搜索算法每次比较都会将搜索区域减少一半。
3。实施思路。
①找到数组中间的值,存入一个变量中(为了下面的解释,该变量暂称为temp);
② 需要找到的key是与temp比较;
③ 如果 key 的值大于 temp,则以数组的中间位置作为下一步计算的起点;重复①②。
④如果key值小于temp,则以数组的中间位置作为下次计算的终点;重复①②③。
⑤如果键值等于temp,则返回数组下标,查找完成。
4。部署代码。
/**
* 描述:二分查找。
* @param array 要搜索的有序数组
* @param 从起始下标开始
* @param 结束下标
* @param key 需要搜索的关键字
* @return
*/
public static 0 if ( from 0 || to 0 ) {
throw new Illegal ArgumentException ( "Params from Length必须大于 0。"); (从 1) + (到 1); // 向右更改并用 2
e temp = 矩阵 [mid] return center;
二分查找 (matrix, from, to, key);
}}
版权声明
本文仅代表作者观点,不代表Code前端网立场。
本文系作者Code前端网发表,如需转载,请注明页面地址。
code前端网
