詳解Java數(shù)據(jù)結(jié)構(gòu)和算法(有序數(shù)組和二分查找)
一、概述
有序數(shù)組中常常用到二分查找,能提高查找的速度。今天,我們用順序查找和二分查找實(shí)現(xiàn)數(shù)組的增刪改查。
二、有序數(shù)組的優(yōu)缺點(diǎn)
優(yōu)點(diǎn):查找速度比無序數(shù)組快多了
缺點(diǎn):插入時要按排序方式把后面的數(shù)據(jù)進(jìn)行移動
三、有序數(shù)組和無序數(shù)組共同優(yōu)缺點(diǎn)
刪除數(shù)據(jù)時必須把后面的數(shù)據(jù)向前移動來填補(bǔ)刪除項(xiàng)的漏洞
四、代碼實(shí)現(xiàn)
public class OrderArray {
private int nElemes; //記錄數(shù)組長度
private long[] a;
/**
* 構(gòu)造函數(shù)里面初始化數(shù)組 賦值默認(rèn)長度
*
* @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; //返回大于最大索引整數(shù)
}else{ //還要繼續(xù)找
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++;
}
//刪除數(shù)據(jù)項(xiàng)
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();
}
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- 帶你了解Java數(shù)據(jù)結(jié)構(gòu)和算法之?dāng)?shù)組
- Java數(shù)據(jù)結(jié)構(gòu)實(shí)現(xiàn)二維數(shù)組與稀疏數(shù)組轉(zhuǎn)換詳解
- Java數(shù)據(jù)結(jié)構(gòu)與算法之稀疏數(shù)組與隊(duì)列深入理解
- java數(shù)據(jù)結(jié)構(gòu)基礎(chǔ):稀疏數(shù)組
- 淺談Java數(shù)據(jù)結(jié)構(gòu)之稀疏數(shù)組知識總結(jié)
- java數(shù)據(jù)結(jié)構(gòu)和算法中數(shù)組的簡單入門
- Java數(shù)據(jù)結(jié)構(gòu)之?dāng)?shù)組(動力節(jié)點(diǎn)之Java學(xué)院整理)
- java數(shù)據(jù)結(jié)構(gòu)與算法之雙向循環(huán)隊(duì)列的數(shù)組實(shí)現(xiàn)方法
- Java?數(shù)據(jù)結(jié)構(gòu)與算法系列精講之?dāng)?shù)組
相關(guān)文章
java volatile關(guān)鍵字的含義詳細(xì)介紹
這篇文章主要介紹了java volatile關(guān)鍵字的含義詳解的相關(guān)資料,需要的朋友可以參考下2016-12-12
在Spring Boot2中使用CompletableFuture的方法教程
這篇文章主要給大家介紹了關(guān)于在Spring Boot2中使用CompletableFuture的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起看看吧2019-01-01
Spring Security獲取用戶認(rèn)證信息的實(shí)現(xiàn)流程
Spring Security是一個能夠?yàn)榛赟pring的企業(yè)應(yīng)用系統(tǒng)提供聲明式的安全訪問控制解決方案的安全框架。它提供了一組可以在Spring應(yīng)用上下文中配置的Bean,充分利用了Spring IoC,DI和AOP功能,為應(yīng)用系統(tǒng)提供聲明式的安全訪問控制功能2022-12-12
Java超詳細(xì)分析講解final關(guān)鍵字的用法
關(guān)于final關(guān)鍵字,它也是我們一個經(jīng)常用的關(guān)鍵字,可以修飾在類上、或者修飾在變量、方法上,以此看來定義它的一些不可變性!像我們經(jīng)常使用的String類中,它便是final來修飾的類,并且它的字符數(shù)組也是被final所修飾的。但是一些final的一些細(xì)節(jié)你真的了解過嗎2022-06-06
java實(shí)現(xiàn)代碼統(tǒng)計小程序
這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)代碼統(tǒng)計小程序,具有一定的參考價值,感興趣的小伙伴們可以參考一下2019-09-09

