查找数据的两种方法和一种删除方法及冒泡

第一种查找:顺序查找

即从头开始一个一个查找这种较为简单

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左右,即在一两根电线杆附近.这样就省了很多精力了. 这里也是同理

可以节约运行时间,查找的效率更高

  1. 要用到的知识点很多,如冒泡循环,二分法

  2. 但这总速度更快

        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();

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值