二分查找不必须是升序,降序排列的数组也可以执行二分查找。
二分查找算法是一种高效的搜索方法,它要求数据集是有序的,无论是升序还是降序都可以。在升序排列的情况下,算法会将目标值与中间值比较,如果目标值较小,则在左半部分继续查找;如果目标值较大,则在右半部分继续查找。在降序排列的情况下,比较逻辑相反
点击查看代码
package com.itheima.javase;
import java.util.Arrays;
import java.util.Random;
import java.util.Scanner;
public class Demo {
public static Random random=new Random();
public static Scanner scanner=new Scanner(System.in);
public static void main(String[] args) {
int[] arr=new int[10];
initArray(arr);
System.out.println(Arrays.toString(arr));
bubbleSort(arr);
selectSort(arr);
//Arrays.sort(arr);
System.out.println(Arrays.toString(arr));
int num=scanner.nextInt();
int index=binarySearch(arr,num);
System.out.println(index);
}
private static int binarySearch(int[] arr,int num) {
int left=0,right=arr.length-1;
while(left<=right){
int mid=(left+right)/2;
if(num>arr[mid])
right=mid-1;
else if(num<arr[mid])
left=mid+1;
else
return mid;
}
return -1;
}
private static void selectSort(int[] arr) {
for (int i = 0; i < arr.length-1; i++) {
int maxIndex=i;
for (int j = i+1; j < arr.length; j++) {
if(arr[j]>arr[maxIndex])
maxIndex=j;
}
if(i!=maxIndex){
int t=arr[i]^arr[maxIndex];
arr[i]^=t;
arr[maxIndex]^=t;
}
}
System.out.println(Arrays.toString(arr));
}
private static void bubbleSort(int[] arr) {
for (int i = 0; i < arr.length-1; i++) {
for (int j = 0; j < arr.length-i-1; j++) {
if(arr[j]<arr[j+1]){
int t=arr[j]^arr[j+1];
arr[j]^=t;
arr[j+1]^=t;
}
}
}
System.out.println(Arrays.toString(arr));
}
private static void initArray(int[] arr) {
for (int i = 0; i < arr.length; i++) {
arr[i]=random.nextInt(100);
}
}
}