二分搜索算法
来源:互联网 发布:单词社交网络pdf百度云 编辑:程序博客网 时间:2024/04/30 03:13
二分搜索算法
题目:设 a [ 0 : n - 1 ] 是一个已排好序的数组。请改写二分搜索算法,使得当搜索元素 x 不在数组中时,返回小于 x 的最大元素的位置 i 和大于 x 的最小元素位置 j 。当搜索元素在数组中时, i 和j相同,均为 x 在数组中的位置。并对自己的程序进行复杂性分析。
import java.util.Arrays;import java.util.Scanner;public class Main {static int x;// 需要查找的数据// 形参i,j是数组下标,arr是原数组,answer是存储答案的数组static void getij(int i, int j, int[] arr, int[] answer) {if (i > j) {// x不在数组中的情况answer[0] = j;answer[1] = i;return;}int len = j - i + 1;// 加不加1都可以if (x == arr[len / 2 + i]) {// x在数组中的情况Arrays.fill(answer, len / 2 + i);// java api 方法,作用是将数组answer里的元素都赋值为len/2+1} else if (x < arr[len / 2 + i]) {getij(i, len / 2 + i - 1, arr, answer);} else {getij(len / 2 + i + 1, j, arr, answer);}}public static void main(String[] args) {Scanner scanner = new Scanner(System.in);while (scanner.hasNext()) {int n = scanner.nextInt();int[] arr = new int[n];for (int i = 0; i < n; i++) {arr[i] = scanner.nextInt();}x = scanner.nextInt();// 答案 存储的是数组下标 i = answer[0]; j = answer[1]int[] answer = new int[2];getij(0, n - 1, arr, answer);// 0,n-1都是数组的下标System.out.println(answer[0] + " " + answer[1]);}scanner.close();}}
0 0
- 【基础算法】搜索-二分搜索
- C#二分搜索算法
- 二分搜索算法
- 二分搜索算法
- 二分搜索算法
- 二分搜索算法
- 二分搜索算法
- 简单算法--二分搜索
- 二分搜索算法细节
- 研究二分搜索算法
- 二分搜索算法
- 二分搜索算法
- 二分搜索算法
- 二分搜索算法
- 二分搜索算法
- 二分搜索算法
- 分治算法--二分搜索
- java二分搜索算法
- [MFC] CString相关转换
- RUDP之三 —— Virtual Connection over UDP
- 使用log4jdbc使myeclipse中项目运行的sql语句打印在console配置口
- Linux命令之 grep(二)
- js中对数组的操作-------Day49
- 二分搜索算法
- HTTP的工作原理
- poj3249 Test for Job --- 拓扑排序
- 设计模式之观察者模式(Observer)摘录
- NS2 nam中节点及数据流颜色设置
- RUDP之四 —— Reliability and Flow Control(后附所有源码下载)
- iis 6 文件上传大小问题
- 黑马程序员_Foundation学习之NSString、NSArray及相关
- XtraGrid使用心得二