package firstExam.tenth;
import java.util.Scanner;
/**
* 请编写二分法算法
*/
/*
* 整体思路:先对数组排序再进行查找
*/
public class Test {
public static void main(String[] args) {
int[] array={90, 23, 45, 34, 56, 67, 89, 77, 90,12,222};
System.out.println("\n查找的元素在排序后的数组中的下标为"+search(sort(array),222));
}
public static int[] sort(int[] a){
int min=0;
for(int i=0;i<a.length;i++){
min=a[i];
int j;
int index=i;
for(j=i+1;j<a.length;j++){
if(min>a[j]){
min=a[j];
index=j;
}
}
a[index]=a[i];
a[i]=min;
}
System.out.println("升序排列后的数组元素为:");
for(int num:a){
System.out.print(num+" ");
}
return a;
}
public static int search(int[]a,int num){
int min=0;
int max=a.length-1;
int middle=(min+max)/2;
int i=0;
for(i=0;min<=max;i++){
if(num<a[middle]){
max=middle-1;
}else if(num>a[middle]){
min=middle+1;
}else{
return middle;
}
middle=(min+max)/2;
}
return -1;
}
}
//老师代码
package firstExam.tenth;
public class TeaSearch {
public static void main(String[] args) {
int array[] = {90, 23, 45, 34, 56, 67, 89, 77, 90,12};
array = paixu(array);
for(int i:array){
System.out.print(i+" ");
}
System.out.println("查找的元素位置在"+search(array, 2));
}
/**
* 二分查找
* @param array
* @param key
* @return
*/
public static int search(int[] array,int key){
int start = 0;
int end = array.length-1;
while(start<=end){
int middle = (start+end)/2;
if(key < array[middle]){
end = middle-1;
}else if(key > array[middle]){
start = middle + 1;
}else{
return middle;
}
}
return -1;
}
public static int[] paixu(int[] array){
for(int i=array.length-1;i>=0;i--){
for(int j=0;j<i;j++){
if(array[j]>array[j+1]){
int temp =array[j];
array[j] = array[j+1];
array[j+1] = temp;
}
}
}
return array;
}
}