算法之一的二分法查找中心思想就是对半分,前提是数据已经进行排序了!
代码
public class Dublearraytest {
public static void main(String [] agrs ) {
//创建新的数组
int [] arr= { 10,20,52,48,78,98,45,4655,885 };
int [] a= { 10,20,52,78,98,4655 ,98888 };
//binarysolect(a,98);
select(a,98);
binarysolect(arr,98);
}
//二分法查找
public static void binarysolect( int [] array,int a ) {//a时查找元素的值
//判断是否需要排序
for(int i=0;i<array.length;i++)
{
int min=array[0];
if(array[i]>min)
{
selectsort( array);
// Arrays.sort(array);//排序工具包
break;//结束排序但是程序不会结束
//return;整个程序结束
}
}
//开始下标
int begin=0;
//结束下标
int end= array.length-1;
//查询
while(begin <=end)
{
//开始查找下标
int mid =(begin+end)/2;
if (array[mid] == a) {
System.out.println("查找元素在数组第" + mid + "个位置");
return;
} else if (array[mid] < a) {
begin = mid + 1;
} else {
end = mid - 1;
}
}
System.out.println("没有要查找的元素");
}
//一个一个找
public static void select(int [] array ,int a) {
for(int i=0;i<array.length;i++)
{
if(array[i]==a)
{
System.out.println(i);
return ;//结束
}
}
System.out.println("没有此元素");
}
//选择排序
public static void selectsort(int [] array) {
for (int i= 0;i<array.length-1;i++) {
int min =i;
for(int j=i+1;j<array.length;j++) {
if(array[min]>array[j]) {
min=j;
}
}
if(min!=i) {
int t= array[min];
array[min]=array[i];
array[i]=t;
}
}
}
}
运行结果
上面代码中排序算法是选择排序,友友们可以使用Arrays包中的sort()方法,下面的练习代码有友友们可以试着了解一下
package Absttact;
import java.util.Arrays;
import java.util.Scanner;
//Array工具类
public class Arraystes {
public static void main(String [] agrs) {
int [] a = {1,2,5,18,96,177};
Doubleselect(a);
}
//二分法查找
public static void Doubleselect(int [] array) {
//排序
for(int i=0;i<array.length;i++) {
int min =array[0];
if(min<array[i]) {
Arrays.sort(array);
break;
}
}
//查找
int begin=0;
int end= array.length-1;
Scanner sc= new Scanner(System.in);
System.out.println("输入查找的元素");
int a=sc.nextInt();
while (begin<=end) {
int mid =(begin+end)/2;
if(array[mid]==a)
{
System.out.println("查找元素在数组第" + mid + "个位置");
return;
}
else if(array[mid]<a) {
begin=mid +1;
}
else {
begin=end-1;
}
}
}
}