全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

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

一、概述

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

二、有序数组的优缺点

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

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

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

四、代码实现

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 


相关文章: 官网自助建站平台指南:在线制作、快速建站与模板选择全解析  制作网站的过程怎么写,用凡科建站如何制作自己的网站?  广东专业制作网站有哪些,广东省能源集团有限公司官网?  建站之星如何开启自定义404页面避免用户流失?  如何选择靠谱的建站公司加盟品牌?  微信小程序 input输入框控件详解及实例(多种示例)  如何通过WDCP绑定主域名及创建子域名站点?  广德云建站网站建设方案与建站流程优化指南  企业网站制作费用多少,企业网站空间一般需要多大,费用是多少?  建站主机选哪种环境更利于SEO优化?  如何配置WinSCP新建站点的密钥验证步骤?  如何选择服务器才能高效搭建专属网站?  小自动建站系统:AI智能生成+拖拽模板,多端适配一键搭建  北京的网站制作公司有哪些,哪个视频网站最好?  建站主机功能解析:服务器选择与快速搭建指南  定制建站平台哪家好?企业官网搭建与快速建站方案推荐  英语简历制作免费网站推荐,如何将简历翻译成英文?  网站制作费用多少钱,一个网站的运营,需要哪些费用?  如何自定义建站之星网站的导航菜单样式?  如何在Mac上搭建Golang开发环境_使用Homebrew安装和管理Go版本  在线流程图制作网站手机版,谁能推荐几个好的CG原画资源网站么?  如何用美橙互联一键搭建多站合一网站?  北京建设网站制作公司,北京古代建筑博物馆预约官网?  建站主机数据库如何配置才能提升网站性能?  免费视频制作网站,更新又快又好的免费电影网站?  高性价比服务器租赁——企业级配置与24小时运维服务  宝塔建站助手安装配置与建站模板使用全流程解析  如何在香港服务器上快速搭建免备案网站?  建站之星体验版:智能建站系统+响应式设计,多端适配快速建站  义乌企业网站制作公司,请问义乌比较好的批发小商品的网站是什么?  如何自定义建站之星模板颜色并下载新样式?  大连网站制作费用,大连新青年网站,五年四班里的视频怎样下载啊?  如何用腾讯建站主机快速创建免费网站?  如何快速搭建高效简练网站?  ,在苏州找工作,上哪个网站比较好?  如何快速查询域名建站关键信息?  外汇网站制作流程,如何在工商银行网站上做外汇买卖?  ,sp开头的版面叫什么?  上海网站制作网页,上海本地的生活网站有哪些?最好包括生活的各个方面的?  电视网站制作tvbox接口,云海电视怎样自定义添加电视源?  建站之星后台管理:高效配置与模板优化提升用户体验  c++怎么编写动态链接库dll_c++ __declspec(dllexport)导出与调用【方法】  网站制作壁纸教程视频,电脑壁纸网站?  如何通过NAT技术实现内网高效建站?  如何用虚拟主机快速搭建网站?详细步骤解析  javascript中对象的定义、使用以及对象和原型链操作小结  建站org新手必看:2024最新搭建流程与模板选择技巧  如何通过PHP快速构建高效问答网站功能?  成都网站制作公司哪家好,四川省职工服务网是做什么用?  C++中引用和指针有什么区别?(代码说明) 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。