java-顺序和乱序数组的二分搜索
来源:互联网 发布:怎样抢注域名 编辑:程序博客网 时间:2024/04/29 09:17
注意:需要将 bs-1.txt 和 bs-2.txt 放入 Java Project 文件夹下。
import java.io.*;import java.util.Scanner;class Number {int num;int index;}class binarySearch {public static void main(String[] args) throws IOException {binarySearch bin = new binarySearch();int array[] = bin.getNum(); // 将txt文件中的数据读入数组Number[] numArray = new Number[150]; // 定义结构体数组for (int i = 0; i < numArray.length; i++) {numArray[i] = new Number();numArray[i].index = i; // 为结构体数组中的每一个数分配索引numArray[i].num = array[i];}numArray = sort(numArray);Scanner in = new Scanner(System.in); // 从键盘中读入要查找的数System.out.println("请输入要查找的数:");int num = in.nextInt();int timeBegin = (int) System.currentTimeMillis();int order = bin.bin_Search(numArray, numArray.length, num);if (order != -1) {System.out.println(num + "在数列中的次序为:" + order);}int timeFinish = (int) System.currentTimeMillis();int time = timeFinish - timeBegin; // 计算算法用时System.out.println("查找用时:" + time + "毫秒");}int[] getNum() throws IOException { // 从txt文件中读取数据Scanner in = new Scanner(System.in);System.out.println("请选择要查找的数组:" + "\n" + "1、顺序数列" + "\n" + "2、乱序数列");int a = in.nextInt();BufferedReader reader;if (a == 1) {reader = new BufferedReader(new FileReader("bs-1.txt")); // 从字符输入流中读取文本} else {reader = new BufferedReader(new FileReader("bs-2.txt"));}int array[] = new int[200];String line; // 每行的字符String sumLine = ""; // 整个txt文件的字符while ((line = reader.readLine()) != null) { // 将每行的字符合并sumLine += line;}String[] num = sumLine.split("\\,"); // 以‘,’为分隔符,将文本分割为字符串reader.close();for (int i = 0; i < num.length; i++) { // 将字符串转为整形,保存在数组中array[i] = Integer.parseInt(num[i]);}return array;}int bin_Search(Number[] a, int array_size, int key) { // 以二分查找算法查找排好序的数组int low = 0, high = array_size - 1, mid;while (low <= high) {mid = (low + high) / 2;if (a[mid].num == key) {return a[mid].index + 1;} else if (a[mid].num < key) {low = mid + 1;} else {high = mid - 1;}}System.out.println("查询失败!");return -1;}static Number[] sort(Number[] a) {Number[] number = new Number[1];number[0] = new Number();for (int i = 0; i < a.length; i++) {for (int j = 1; j < a.length - i; j++) {if (a[j].num < a[j - 1].num) {number[0] = a[j];a[j] = a[j - 1];a[j - 1] = number[0];}}}return a;}}
0 0
- java-顺序和乱序数组的二分搜索
- 乱序数组和随机数
- 乱序数组的算法
- 用java实现的一些插入(顺序和乱序)和查找(顺序和二分)
- C#乱序数组的简单方法
- 有序数组变成乱序数组 乱序数组
- 顺序搜索和二分搜索
- 一句话搞定乱序数组
- 乱序数组元素一升一降
- python 乱序数组,list等有序结构的方法
- 求一个乱序数组的元素最大连续长度
- 搜索算法:顺序搜索和二分搜索
- [黑马程序员]02[c语言]while和for语句的应用,0-9乱序数组的生成
- 生成指定范围内无重复的随机乱序数组(JAVA实现/时间复杂度为O(n))
- 找到一个乱序数组排序后某一特定数值首次和末次出现的位置
- 不完全乱序数组重排序。
- 算法学习之一—乱序数组
- 实现只有0,1,2三种元素的乱序数组的排序
- struts2 存取cookie
- php 抽象类,接口定义
- perl:debug方法
- 单向链表的简单使用
- Cocos2d-x常用设计模式——单例模式
- java-顺序和乱序数组的二分搜索
- qt-everywhere-opensource 4.7.4 崩溃不会产生core文件
- Odoo android 端开发
- STL空间配置器源码及其分析
- ORACLE的物化视图
- HDU 1905(Pseudoprime numbers)
- 计算机网络——体系结构
- 矩阵键盘的检测
- java实现二叉树的遍历