二分法(输入一组数,输入要找的数,看二分法需要几次找到)


import java.io.BufferedReader;
import java.io.InputStreamReader;

public class TwoFenOrder{

public int[] inputInteger(){
System.out.println("please input Integer......");
String temp=null;
try{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
temp = br.readLine();
}catch(Exception e){
e.printStackTrace();
}

final int count = temp.length();
int[] intArray = new int[count];

for(int i=0 ; i intArray[i] = Integer.valueOf(temp.substring(i,i+1));
}

//二分法要求数组必须是有序的。(使用递归)
int tmpInt=0;
for(int i=0 ;i for(int j=i;j if(intArray[i] > intArray[j]){
tmpInt = intArray[j];
intArray[j] = intArray[i];
intArray[i] = tmpInt;
}
}
}

//输出排列之后的数组
for(int i : intArray){
System.out.print(i + " ");
}

return intArray;
}

public void twoOrder(int[] intArray){
System.out.println("please input Integer findValue !!!!!!!!");
String temp = null;
try{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
temp = br.readLine();
}catch(Exception e){
e.printStackTrace();
}

final int count =intArray.length;

//要寻找的值
int findValue = Integer.valueOf(temp);

//起始start索引
int start = 0;

//终了end索引
int end = count-1;

//比较索引
int index = (start + end)/2;

//二分法查找次数
int sum = 0;

while(true){
if(intArray[index] < findValue){
start = index;
index = (start + end)/2;
sum++;
}else if(intArray[index] > findValue){
end = index;
index = (start + end)/2;
sum++;
}else if(intArray[index] == findValue){
System.out.println("使用二分法查找的次数是:" + sum);
break;
}//如果输入没有怎么办那?
}
}

public static void main(String[] args){
TwoFenOrder twoFenOrder = new TwoFenOrder();
int[] intArray = twoFenOrder.inputInteger();
twoFenOrder.twoOrder(intArray);
}
}

你可能感兴趣的:(J#)