欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

詳解Java數(shù)據(jù)結(jié)構(gòu)和算法(有序數(shù)組和二分查找)

 更新時(shí)間:2017年09月23日 16:21:29   作者:臨窗聽雨  
本篇文章主要介紹了詳解Java數(shù)據(jù)結(jié)構(gòu)和算法(有序數(shù)組和二分查找),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

一、概述

有序數(shù)組中常常用到二分查找,能提高查找的速度。今天,我們用順序查找和二分查找實(shí)現(xiàn)數(shù)組的增刪改查。

二、有序數(shù)組的優(yōu)缺點(diǎn)

優(yōu)點(diǎn):查找速度比無序數(shù)組快多了
缺點(diǎn):插入時(shí)要按排序方式把后面的數(shù)據(jù)進(jìn)行移動(dòng)

三、有序數(shù)組和無序數(shù)組共同優(yōu)缺點(diǎn)

刪除數(shù)據(jù)時(shí)必須把后面的數(shù)據(jù)向前移動(dòng)來填補(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{
       //所有元素往前移動(dòng)一位
       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í)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • java volatile關(guān)鍵字的含義詳細(xì)介紹

    java volatile關(guān)鍵字的含義詳細(xì)介紹

    這篇文章主要介紹了java volatile關(guān)鍵字的含義詳解的相關(guān)資料,需要的朋友可以參考下
    2016-12-12
  • Java下載文件的4種方式總結(jié)

    Java下載文件的4種方式總結(jié)

    這篇文章主要給大家總結(jié)介紹了關(guān)于Java下載文件的4種方式,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-01-01
  • 在Spring Boot2中使用CompletableFuture的方法教程

    在Spring Boot2中使用CompletableFuture的方法教程

    這篇文章主要給大家介紹了關(guān)于在Spring Boot2中使用CompletableFuture的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起看看吧
    2019-01-01
  • Spring Security獲取用戶認(rèn)證信息的實(shí)現(xiàn)流程

    Spring Security獲取用戶認(rèn)證信息的實(shí)現(xiàn)流程

    Spring Security是一個(gè)能夠?yàn)榛赟pring的企業(yè)應(yīng)用系統(tǒng)提供聲明式的安全訪問控制解決方案的安全框架。它提供了一組可以在Spring應(yīng)用上下文中配置的Bean,充分利用了Spring IoC,DI和AOP功能,為應(yīng)用系統(tǒng)提供聲明式的安全訪問控制功能
    2022-12-12
  • Java實(shí)現(xiàn)多線程同步五種方法詳解

    Java實(shí)現(xiàn)多線程同步五種方法詳解

    這篇文章主要介紹了Java實(shí)現(xiàn)多線程同步五種方法詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-03-03
  • 淺談maven單元測試設(shè)置代理

    淺談maven單元測試設(shè)置代理

    下面小編就為大家?guī)硪黄獪\談maven單元測試設(shè)置代理。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-08-08
  • Java超詳細(xì)分析講解final關(guān)鍵字的用法

    Java超詳細(xì)分析講解final關(guān)鍵字的用法

    關(guān)于final關(guān)鍵字,它也是我們一個(gè)經(jīng)常用的關(guān)鍵字,可以修飾在類上、或者修飾在變量、方法上,以此看來定義它的一些不可變性!像我們經(jīng)常使用的String類中,它便是final來修飾的類,并且它的字符數(shù)組也是被final所修飾的。但是一些final的一些細(xì)節(jié)你真的了解過嗎
    2022-06-06
  • Spring中Bean的生命周期實(shí)例解析

    Spring中Bean的生命周期實(shí)例解析

    這篇文章主要介紹了Spring中Bean的生命周期實(shí)例解析,我們定義一個(gè)自定義的MySpringBeanPostProcessor,主要是重寫了BeanPostProcessor接口的postProcessBeforeInitialization與postProcessAfterInitialization方法,需要的朋友可以參考下
    2023-12-12
  • java如何替換word/doc文件中的內(nèi)容

    java如何替換word/doc文件中的內(nèi)容

    docx格式的文件本質(zhì)上是一個(gè)XML文件,只要用占位符在指定的地方標(biāo)記,然后替換掉標(biāo)記出的內(nèi)容,這篇文章主要介紹了java替換word/doc文件中的內(nèi)容,需要的朋友可以參考下
    2023-06-06
  • java實(shí)現(xiàn)代碼統(tǒng)計(jì)小程序

    java實(shí)現(xiàn)代碼統(tǒng)計(jì)小程序

    這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)代碼統(tǒng)計(jì)小程序,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-09-09

最新評論