详解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 】 【 网络技术251811 】 【 AI营销90571


相关推荐: 美食网站链接制作教程视频,哪个教做美食的网站比较专业点?  Laravel如何处理异常和错误?(Handler示例)  python中快速进行多个字符替换的方法小结  Laravel如何配置和使用队列处理异步任务_Laravel队列驱动与任务分发实例  Win11搜索不到蓝牙耳机怎么办 Win11蓝牙驱动更新修复【详解】  网站设计制作书签怎么做,怎样将网页添加到书签/主页书签/桌面?  如何挑选优质建站一级代理提升网站排名?  微信推文制作网站有哪些,怎么做微信推文,急?  html文件怎么打开证书错误_https协议的html打开提示不安全【指南】  黑客如何利用漏洞与弱口令入侵网站服务器?  北京专业网站制作设计师招聘,北京白云观官方网站?  Laravel如何实现多对多模型关联?(Eloquent教程)  Bootstrap整体框架之CSS12栅格系统  UC浏览器如何切换小说阅读源_UC浏览器阅读源切换【方法】  Laravel广播系统如何实现实时通信_Laravel Reverb与WebSockets实战教程  javascript中闭包概念与用法深入理解  猎豹浏览器开发者工具怎么打开 猎豹浏览器F12调试工具使用【前端必备】  Laravel如何与Inertia.js和Vue/React构建现代单页应用  Laravel怎么写单元测试_PHPUnit在Laravel项目中的基础测试入门  如何在企业微信快速生成手机电脑官网?  如何快速完成中国万网建站详细流程?  Java垃圾回收器的方法和原理总结  如何用VPS主机快速搭建个人网站?  网站制作价目表怎么做,珍爱网婚介费用多少?  如何撰写建站申请书?关键要点有哪些?  怎么用AI帮你设计一套个性化的手机App图标?  如何在宝塔面板创建新站点?  ChatGPT常用指令模板大全 新手快速上手的万能Prompt合集  Android滚轮选择时间控件使用详解  深圳网站制作设计招聘,关于服装设计的流行趋势,哪里的资料比较全面?  Laravel distinct去重查询_Laravel Eloquent去重方法  JavaScript常见的五种数组去重的方式  google浏览器怎么清理缓存_谷歌浏览器清除缓存加速详细步骤  惠州网站建设制作推广,惠州市华视达文化传媒有限公司怎么样?  html5源代码发行怎么设置权限_访问权限控制方法与实践【指南】  Laravel怎么使用Blade模板引擎_Laravel模板继承与Component组件复用【手册】  简历没回改:利用AI润色让你的文字更专业  如何在阿里云虚拟服务器快速搭建网站?  网站制作免费,什么网站能看正片电影?  Laravel项目怎么部署到Linux_Laravel Nginx配置详解  如何在Windows虚拟主机上快速搭建网站?  手机软键盘弹出时影响布局的解决方法  Claude怎样写约束型提示词_Claude约束提示词写法【教程】  Laravel怎么防止CSRF攻击_Laravel CSRF保护中间件原理与实践  香港服务器网站生成指南:免费资源整合与高速稳定配置方案  Laravel如何使用Blade模板引擎?(完整语法和示例)  JS去除重复并统计数量的实现方法  Laravel如何实现事件和监听器?(Event & Listener实战)  如何在阿里云ECS服务器部署织梦CMS网站?  Laravel如何实现API版本控制_Laravel版本化API设计方案