详解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


相关推荐: UC浏览器如何设置启动页 UC浏览器启动页设置方法  大连网站制作公司哪家好一点,大连买房网站哪个好?  如何确保FTP站点访问权限与数据传输安全?  Edge浏览器提示“由你的组织管理”怎么解决_去除浏览器托管提示【修复】  Laravel如何使用Service Provider服务提供者_Laravel依赖注入与容器绑定【深度】  如何将凡科建站内容保存为本地文件?  弹幕视频网站制作教程下载,弹幕视频网站是什么意思?  香港服务器租用费用高吗?如何避免常见误区?  Laravel如何优化应用性能?(缓存和优化命令)  如何在云主机上快速搭建网站?  js实现获取鼠标当前的位置  Laravel如何处理表单验证?(Requests代码示例)  Android 常见的图片加载框架详细介绍  极客网站有哪些,DoNews、36氪、爱范儿、虎嗅、雷锋网、极客公园这些互联网媒体网站有什么差异?  JS弹性运动实现方法分析  打开php文件提示内存不足_怎么调整php内存限制【解决方案】  如何在IIS中配置站点IP、端口及主机头?  标题:Vue + Vuex 项目中正确使用 JWT 进行身份认证的实践指南  Laravel怎么集成Vue.js_Laravel Mix配置Vue开发环境  Firefox Developer Edition开发者版本入口  Laravel如何创建和注册中间件_Laravel中间件编写与应用流程  利用python获取某年中每个月的第一天和最后一天  Python文本处理实践_日志清洗解析【指导】  Laravel如何升级到最新版本?(升级指南和步骤)  百度输入法ai面板怎么关 百度输入法ai面板隐藏技巧  使用PHP下载CSS文件中的所有图片【几行代码即可实现】  Laravel如何与Pusher实现实时通信?(WebSocket示例)  购物网站制作费用多少,开办网上购物网站,需要办理哪些手续?  Windows Hello人脸识别突然无法使用  宙斯浏览器怎么屏蔽图片浏览 节省手机流量使用设置方法  Laravel软删除怎么实现_Laravel Eloquent SoftDeletes功能使用教程  成都品牌网站制作公司,成都营业执照年报网上怎么办理?  北京专业网站制作设计师招聘,北京白云观官方网站?  Laravel如何使用Guzzle调用外部接口_Laravel发起HTTP请求与JSON数据解析【详解】  Laravel如何集成微信支付SDK_Laravel使用yansongda-pay实现扫码支付【实战】  Laravel项目如何进行性能优化_Laravel应用性能分析与优化技巧大全  JavaScript如何实现倒计时_时间函数如何精确控制  最好的网站制作公司,网购哪个网站口碑最好,推荐几个?谢谢?  如何用AWS免费套餐快速搭建高效网站?  如何在阿里云完成域名注册与建站?  nodejs redis 发布订阅机制封装实现方法及实例代码  高端建站如何打造兼具美学与转化的品牌官网?  ,怎么在广州志愿者网站注册?  使用spring连接及操作mongodb3.0实例  Laravel如何使用withoutEvents方法临时禁用模型事件  如何在景安云服务器上绑定域名并配置虚拟主机?  高防服务器租用指南:配置选择与快速部署攻略  如何用wdcp快速搭建高效网站?  如何快速搭建高效可靠的建站解决方案?  Laravel Admin后台管理框架推荐_Laravel快速开发后台工具