详解Java数据结构和算法(有序数组和二分查找)

发布时间 - 2026-01-11 03:23:25    点击率:

一、概述

有序数组中常常用到二分查找,能提高查找的速度。今天,我们用顺序查找和二分查找实现数组的增删改查。

二、有序数组的优缺点

优点:查找速度比无序数组快多了
缺点:插入时要按排序方式把后面的数据进行移动

三、有序数组和无序数组共同优缺点

删除数据时必须把后面的数据向前移动来填补删除项的漏洞

四、代码实现

public class OrderArray {
  
   private int nElemes; //记录数组长度
   
   private long[] a;
   
   /**
   * 构造函数里面初始化数组 赋值默认长度
   *
   * @param max
   */
   public OrderArray(int max){
     this.a = new long[max];
     nElemes = 0;
   }
   
   //查找方法 (二分查找)
   public int find(long searchElement){
     int startIndex = 0;
     int endIndex = nElemes-1;
     int curIn;
     while(true){
       curIn = (startIndex + endIndex)/2;
       if(a[curIn]==searchElement){
         return curIn; //找到
       }else if(startIndex>endIndex){ //沒有找到
         return nElemes; //返回大于最大索引整数
       }else{ //还要继续找
         if(a[curIn]<searchElement){
           startIndex = curIn + 1; //改变最小索引
         }else{ //往前找
           endIndex = curIn -1;
         }
       }
       
     }
   }
   
   
   //插入元素(线性查找)
   public void insert(long value){
     int j;
     for(j=0;j<nElemes;j++){
       if(a[j]>value){
         break;
       }
     }
     for(int k=nElemes;k>j;k--){
       a[k] = a[k-1];
     }
     a[j] = value;
     nElemes++;
   }
   
   //删除数据项
   public boolean delete(long value){
     int j = find(value);
     if(j==nElemes){
       return false; //没找到
     }else{
       //所有元素往前移动一位
       for(int k=j;k<nElemes;k++)
       a[k] = a[k+1];
       
       nElemes--;
       return true;
     }
   }
   //展示的方法
   public void display(){
     for(int i=0;i<nElemes;i++){
       System.out.print(a[i]+" ");
     }
   }
   
   public int size(){
     return nElemes;
   }
}

五、测试

 public static void main(String[] args) {
     int max = 100;
     OrderArray oa = new OrderArray(max);
     oa.insert(12);
     oa.insert(14);
     oa.insert(90);
     oa.insert(89);
     oa.insert(87);
     oa.insert(88);
     oa.insert(67);
     oa.display();
     int searchkey = 90;
     if(oa.find(searchkey)!=oa.size()){
       System.out.println("found"+searchkey);
     }else{
       System.out.println("not found");
     }
     oa.delete(88);
     oa.delete(90);
     oa.delete(89);
     oa.display();
   }

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。


# Java  # 有序数组  # 二分查找  # java数组二分查找  # 带你了解Java数据结构和算法之数组  # Java数据结构实现二维数组与稀疏数组转换详解  # Java数据结构与算法之稀疏数组与队列深入理解  # java数据结构基础:稀疏数组  # 浅谈Java数据结构之稀疏数组知识总结  # java数据结构和算法中数组的简单入门  # Java数据结构之数组(动力节点之Java学院整理)  # java数据结构与算法之双向循环队列的数组实现方法  # Java 数据结构与算法系列精讲之数组  # 时要  # 大家多多  # 组中  # searchElement  # startIndex  # find  # max  # param  # endIndex  # gt  # lt  # return  # curIn  # true  # long  # class  # brush  # pre  # strong  # br 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: Python自然语言搜索引擎项目教程_倒排索引查询优化案例  php后缀怎么变mp4格式错误_修改扩展名提示格式不对怎么办【技巧】  javascript中的try catch异常捕获机制用法分析  如何在Tomcat中配置并部署网站项目?  想要更高端的建设网站,这些原则一定要坚持!  java获取注册ip实例  再谈Python中的字符串与字符编码(推荐)  北京网站制作的公司有哪些,北京白云观官方网站?  如何快速登录WAP自助建站平台?  今日头条AI怎样推荐抢票工具_今日头条AI抢票工具推荐算法与筛选【技巧】  如何用免费手机建站系统零基础打造专业网站?  Laravel如何处理和验证JSON类型的数据库字段  PHP 500报错的快速解决方法  Python文件异常处理策略_健壮性说明【指导】  如何制作新型网站程序文件,新型止水鱼鳞网要拆除吗?  济南网站建设制作公司,室内设计网站一般都有哪些功能?  进行网站优化必须要坚持的四大原则  如何在服务器上配置二级域名建站?  详解Oracle修改字段类型方法总结  青岛网站建设如何选择本地服务器?  Laravel Telescope怎么调试_使用Laravel Telescope进行应用监控与调试  Win11应用商店下载慢怎么办 Win11更改DNS提速下载【修复】  Laravel如何使用Blade模板引擎?(完整语法和示例)  如何自定义safari浏览器工具栏?个性化设置safari浏览器界面教程【技巧】  千库网官网入口推荐 千库网设计创意平台入口  JS碰撞运动实现方法详解  Laravel如何使用Eloquent ORM进行数据库操作?(CRUD示例)  如何快速生成高效建站系统源代码?  厦门模型网站设计制作公司,厦门航空飞机模型掉色怎么办?  网站制作软件免费下载安装,有哪些免费下载的软件网站?  韩国代理服务器如何选?解析IP设置技巧与跨境访问优化指南  Laravel如何配置任务调度?(Cron Job示例)  Java垃圾回收器的方法和原理总结  浅述节点的创建及常见功能的实现  Laravel如何生成和使用数据填充?(Seeder和Factory示例)  Laravel如何集成微信支付SDK_Laravel使用yansongda-pay实现扫码支付【实战】  Win11搜索不到蓝牙耳机怎么办 Win11蓝牙驱动更新修复【详解】  网站页面设计需要考虑到这些问题  制作电商网页,电商供应链怎么做?  昵图网官网入口 昵图网素材平台官方入口  如何获取PHP WAP自助建站系统源码?  Firefox Developer Edition开发者版本入口  使用Dockerfile构建java web环境  Gemini怎么用新功能实时问答_Gemini实时问答使用【步骤】  如何选择可靠的免备案建站服务器?  LinuxShell函数封装方法_脚本复用设计思路【教程】  如何快速搭建安全的FTP站点?  如何挑选优质建站一级代理提升网站排名?  Laravel怎么实现模型属性的自动加密  Java遍历集合的三种方式