java 二分法
程序员文章站
2022-09-24 14:15:21
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);
}
//逆序打印
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);
}
本文地址:https://blog.csdn.net/qq_49249150/article/details/107579334