详解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快速开发后台工具

