详解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遍历集合的三种方式

