第一种查找:顺序查找
即从头开始一个一个查找这种较为简单
Scanner input=new Scanner(System.in);
int[] num={13,43,64,23,54,23,24,54,15,65,32};
System.out.println("输入你要查找的数据:");
int index=-1;
int sz=input.nextInt();
for (int i=0;i< num.length;i++){
if (sz==num[i]){
index=i;
break;
}
}
if (index==-1){
System.out.println("未找到你要的数据");
}else{
System.out.println("找到了是第"+index+"位。");
}
System.out.println("查找结束");
input.close();
删除,在查找的基础上
Scanner input=new Scanner(System.in);
int[] num={13,43,64,23,54,23,24,54,15,65,32};
for ( int m:num){
System.out.print( m+" ");
}
System.out.println();
System.out.println("输入你要查找的数据:");
int index=-1;
int sz=input.nextInt();
for (int i=0;i< num.length;i++){
if (sz==num[i]){
index=i;
break;
}
}
if (index==-1){
System.out.println("未找到你要的数据");
}else{
System.out.println("找到了是第"+index+"位。");
for (int i=index;i< num.length-1;i++){
num[i]=num[i+1];
}
num[num.length-1]=0;
}
System.out.println("删除后");
for (int n:num){
System.out.print(n+" ");
}
System.out.println();
System.out.println("查找结束");
input.close();
只是在后面的else里加上了一段话,且只能删除你要查找的那个数字;这里删除的的数字与i=index有关
i=几那么便从对应的num[i]数字开始删除,第二种同理,也可以删除
第二种查找,为二分法
较为困难
学习这个首先要知道冒泡循环:即从大到小排列后从小到大排列;
这里需要用到一个瓶子变量,用于转换变量
int[] num={35,43,25,77,48,21,24};
System.out.println();
System.out.println("排列前:=====================");
for (int m:num){
System.out.print(m+" ");
}
for (int i=1;i< num.length-1;i++){
for (int j=0;j< num.length-i;j++){
if (num[j]>num[j+1]){
int ping=num[j];
num[j]=num[j+1];
num[j+1]=ping;
}
}
}
System.out.println("排列结束===============================");
for (int n:num){
System.out.print(n+" ");
}
二分法开始
二分法可以从一个故事中理解: 一工人要维修一条10km长的电话线,如何迅速查出故障所在.如果沿着线路一小段一小段查找,困难很多.每查一个点要爬一次电线杆子,10km长,大约有200多根电线杆子.因此就可使用二分法:设电线两端分别为A、B,他首先从中点C查,用随身带的话机向两端测试时,发现AC段正常,断定故障在BC段,再到BC中点D,发现BD正常,可见故障在CD段,再到CD中点E来看,这样每查一次,就可以把待查线路长度缩减为一半,故经过7次查找,就可以将故障发生的范围缩小到50—100m左右,即在一两根电线杆附近.这样就省了很多精力了. 这里也是同理
可以节约运行时间,查找的效率更高
-
要用到的知识点很多,如冒泡循环,二分法
-
但这总速度更快
Scanner input=new Scanner(System.in); int[] num={13,65,34,87,23,54,37,43,75,25,86,45,23,99}; System.out.println("==============为改变前的:=============="); for (int n:num){ System.out.print(n+" "); } for (int i=1;i< num.length;i++){ for (int j=0;j< num.length-i;j++){ if (num[j]>num[j+1]){ int ping=num[j]; num[j]=num[j+1]; num[j+1]=ping; } } } System.out.println(); System.out.println("=======================改变后:============"); for (int m:num){ System.out.print(m+" "); } System.out.println(); System.out.println("输入你要查找的数字:"); int cz=input.nextInt(); int index=-1; int height= num.length; int middle=0; int low=0; do { middle=(height+low)/2; if (num[middle]==cz){ index=middle; break; } else if (num[middle]>cz){ height=middle-1; } else { low=middle+1; } }while (low<=height); if (index==-1){ System.out.println("未找到======"); } else{ System.out.println("找到了,是第"+index+"位"); } System.out.println("查找结束=============="); input.close();