数据结构---Java---有序数组
2024-09-04 15:44:21
【自定义有序数组】
查找算法:
线性查找算法:依次对比查询;
二分查找算法:必须是有序;
insert:要插入的value与数组中每个元素进行比较,当有值>value时,此处的index之后的元素整体后移,index位置赋新值;
package com.exiuge.mytest.array; public class MyOrderArray { private long[] arr;
/**
* 实际数组元素大小
*/
private int elementsSize;
/**
* 初始容量50
*/
private static final int initSize=50; public MyOrderArray(){
arr=new long[initSize];
} /**
* insert
* @param value
*/
public void insert(long value){
if (elementsSize>=initSize){
throw new ArrayIndexOutOfBoundsException();
}
int i;
for (i=0;i<elementsSize;i++){
if (arr[i]>value){
break;
}
}
for (int j=elementsSize;j>i;j--){
arr[j]=arr[j-1];
}
arr[i]=value;
elementsSize++;
} /**
* 展示全部
*/
public void display(){
System.out.println("[");
for (int i=0;i<elementsSize;i++){
System.out.print(arr[i]+" ");
}
System.out.println("]");
} /**
* 根据value找下标索引
* @param value
* @return
*/
public int findByValue(long value){
int i;
for (i=0;i<elementsSize;i++){
if (arr[i]==value){
break;
}
}
if (i==elementsSize){
return -1;
}else {
return i;
}
} /**
* 根据value找index(二分查找算法)
* @param value
* @return
*/
public int findByValueSec(long value){
int middle=0,start=0,end=elementsSize;
while (true){
middle=(start+end)/2;
if (arr[middle]==value){
return middle;
}else if (start>end){
return -1;
}else {
if (arr[middle]>value){
end=middle-1;
}else if (arr[middle]<value){
start=middle+1;
}
}
}
} /**
* 根据下标索引找value
* @param index
* @return
*/
public long findByIndex(int index){
if (index>=elementsSize || index<0){
throw new ArrayIndexOutOfBoundsException();
}else {
return arr[index];
}
} /**
* 根据下标索引删除value
* @param index
*/
public void deleteByIndex(int index){
if (index>=elementsSize || index<0){
throw new ArrayIndexOutOfBoundsException();
}else {
for (int i=index;i<elementsSize;i++){
arr[index]=arr[index+1];
}
elementsSize--;
}
} /**
* 根据下标索引进行修改value
* @param index
* @param newValue
*/
public void updateByIndex(int index,long newValue){
if (index>=elementsSize || index<0){
throw new ArrayIndexOutOfBoundsException();
}else {
arr[index]=newValue;
}
} }
最新文章
- 配置rsync服务,数据同步。
- Python之路第一课Day7--随堂笔记(面向对象编程进阶...未完待续 )
- 你必须知道的Javascript 系列
- Java Socket长连接示例代码
- [Android Pro] Android libdvm.so 与 libart.so
- hdu 2034人见人爱A-B
- demo工程的清单文件及activity中api代码简单示例
- 转:10条建议让你创建更好的jQuery插件
- Ubuntu上安装mono并进行C#代码测试
- 如果将synthesize省略,语义特性声明为assign retain copy时,自己实现setter和getter方法
- C# 编写短信发送Window服务
- vim 常用快捷键 二[转]
- laravel中间件源码分析
- HDU1150 Machine Schedule(二分图最大匹配、最小点覆盖)
- javamelody 使用
- JAVA进阶--ThreadPoolExecutor机制
- python全栈学习--day4
- FtpWebRequest.UsePassive属性:设置FTP工作模式
- Hdoj 1374.Knight Moves 题解
- Apache rewrite地址重写
热门文章
- loj10100 网络
- 对 BFC 的理解
- C++新标准:列表初始化
- 解决批处理命令执行完毕后自动关闭cmd窗口方法
- 自己写的Log记录组件
- C/C++使用心得:enum与int的相互转换
- How can I list colors in WPF with XAML?
- 基于ef core 2.0的数据库增删改审计系统
- Ground Truth
- VB6加载MSCOMCTL.OCX出现“不能加载&#39;&#39;”错误的处理方法汇总