看了冒泡排序的原理和二分查找的原理,然后试着用代码实现,权当练手。
package binarysearchdemo;
import java.util.Scanner;
public class BinarySearch01 {
public static void main(String[] args) {
int[] str = {15,8,1,65,34,132,89,43,32,18};
int a;
int strMin=0,strMax=str.length,strCen=str.length/2;
int lastDataMax,lastDataMin,lastDataCen;
//冒泡排序:从小到大排序,从头开始,两两比较,把大的数往后放
for(int x=(str.length)-1;x>0;x--){
for(int i=0;i<x;i++){
if(str[i] > str[i+1]){
a = str[i];
str[i] = str[i+1];
str[i+1] = a;
}
}
}
//打印排序后的数组
System.out.println("从小到大排序后的数组如下:");
for(int b=0;b<str.length;b++){
System.out.print(str[b]+" ");
}
System.out.println();
//初始坐标存为历史记录
lastDataMax = strMax;
lastDataMin = strMin;
lastDataCen = strCen;
//用户输入需要查找的数字
Scanner scan = new Scanner(System.in);
System.out.println("请输入要查找的数字:");
int y = scan.nextInt();
//二分查找
while(y!=str[strCen]){
if((strMax-strMin)==1){//数组中没有用户要找的数字
break;
}else if(y>str[strCen]){
strMin = lastDataCen;
strMax = lastDataMax;
strCen = (strMin+strMax)/2;//计算新范围的中间值,用于比较并判断是否找到要查找的数,循环是否结束。
lastDataCen = strCen;//当查找的数字比当前中间值大的时候,新范围的最大值不变,
lastDataMin = strMin;//最小值和中间值变了,所以最后要重新记录最小和中间值。
}else{
strMin = lastDataMin;
strMax = lastDataCen;
strCen = (strMin+strMax)/2;//计算新范围的中间值,用于比较并判断是否找到要查找的数,循环是否结束。
lastDataCen = strCen;//当查找的数字比当前中间值小的时候,新范围的最小值不变,
lastDataMax = strMax;//最大值和中间值变了,所以最后要重新记录最小和中间值。
}
}
if(y==str[strCen]){
System.out.println("找到用户查找的数字,在数组中的位置为:str["+strCen+"]。");
}
else System.out.println("数组中没有用户查找的数字。");
}
}