欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

java 二分法

程序员文章站 2022-04-16 22:16:42
java 二分法二分法查找数据,就是每次都和中间数据比较,只走一边,极大的提高了查找数据的效率。int[] arr = { 1, 2, 2, 4, 7, 9, 3, 2, 2, 5, 845, 23, 1, 78, 4, 5 };int number = 2;// 要进行二分法必须先进行排序// 排序也有讲究,徐看你是顺序还是逆序// 顺序的话,由小到大,中间的判断要注意,输入查找的数据与每次的中间数值比较时// 大于中间数值就网右走,小于中间数值往左走ord...

java 二分法

二分法查找数据,就是每次都和中间数据比较,只走一边,极大的提高了查找数据的效率。

		int[] arr = { 1, 2, 2, 4, 7, 9, 3, 2, 2, 5, 845, 23, 1, 78, 4, 5 };
		int number = 2;

		// 要进行二分法必须先进行排序
		// 排序也有讲究,需要看你是顺序还是逆序

		// 顺序的话,由小到大,中间的判断要注意,输入查找的数据与每次的中间数值比较时
		// 大于中间数值就往右走,小于中间数值往左走
		order(arr, number);
		// 如果排序时逆序的话,数值大小有大到小就要返过来考虑
		// 输入查找数据大于中间数值就往左走,小于中间数字就往右走。
		reverseOrder(arr, number);

//顺序打印

	private static void order(int[] arr, int number) {
		// 先排序,冒泡
		int len = arr.length - 1;
		for (int i = 0; i < len; i++) {
			for (int j = 0; j < len - i; j++) {
				if (arr[j] > arr[j + 1]) {
					int d = arr[j];
					arr[j] = arr[j + 1];
					arr[j + 1] = d;
				}
			}
		}
		for (int i = 0; i < arr.length; i++) {
			System.out.print(arr[i] + " ");
		}
		System.out.println();
		int sta = 0;
		int en = arr.length - 1;
		int cent = (sta + en) / 2;
		System.out.println("cent=" + cent + "a=" + arr[cent]);

		while (arr[cent] != number) {
			if (sta <= en) {
				System.out.println("while============");
				if (number > arr[cent]) {
					sta = cent + 1;
				} else if (number < arr[cent]) {
					en = cent - 1;
				}
				System.out.println("en=" + en + ",sta=" + sta);
				System.out.println("cent =" + cent + " arr=" + arr[cent]);
				cent = (en + sta) / 2;
				System.out.println("cent =" + cent + " arr=" + arr[cent]);
				System.out.println("while======");
			} else {
				System.out.println("未找到");
				break;
			}
		}
		System.out.println(number);
	}

java 二分法

//逆序打印

	private static void reverseOrder(int[] arr, int number) {
		// 先排序,冒泡
		//
		int len = arr.length - 1;
		for (int i = 0; i < len; i++) {
			for (int j = 0; j < len - i; j++) {
				if (arr[j] < arr[j + 1]) {
					int d = arr[j];
					arr[j] = arr[j + 1];
					arr[j + 1] = d;
				}
			}
		}
		for (int i = 0; i < arr.length; i++) {
			System.out.print(arr[i] + " ");
		}
		System.out.println();
		int sta = 0;
		int en = arr.length - 1;
		int cent = (sta + en) / 2;
		System.out.println("cent=" + cent + "a=" + arr[cent]);

		while (arr[cent] != number) {
			if (sta <= en) {
				System.out.println("while============");
				if (number > arr[cent]) {
					en = cent - 1;
				} else if (number < arr[cent]) {
					sta = cent + 1;
				}
				System.out.println("en=" + en + ",sta=" + sta);
				System.out.println("cent =" + cent + " arr=" + arr[cent]);
				cent = (en + sta) / 2;
				System.out.println("cent =" + cent + " arr=" + arr[cent]);
				System.out.println("while======");
			} else {
				System.out.println("未找到");
				break;
			}
		}
		System.out.println(number);
	}

java 二分法

本文地址:https://blog.csdn.net/qq_49249150/article/details/107579334

相关标签: java