详解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设计方案

