Maison  >  Article  >  Java  >  Analyse de la structure des données du tableau ordonné Java et de l'algorithme de recherche binaire

Analyse de la structure des données du tableau ordonné Java et de l'algorithme de recherche binaire

黄舟
黄舟original
2017-09-25 10:18:111944parcourir

Cet article présente principalement l'explication détaillée des structures de données et des algorithmes Java (tableaux ordonnés et recherche binaire), qui a une certaine valeur de référence. Les amis intéressés peuvent s'y référer

1. >

La recherche binaire est souvent utilisée dans des tableaux ordonnés, ce qui peut améliorer la vitesse de recherche. Aujourd'hui, nous utilisons la recherche séquentielle et la recherche binaire pour implémenter l'ajout, la suppression, la modification et la recherche de tableaux.

2. Avantages et inconvénients des tableaux ordonnés

Avantages : La vitesse de recherche est beaucoup plus rapide que les tableaux non ordonnés

Inconvénients : Lors de l'insertion, vous devez trier les éléments suivants Déplacer les données

3. Avantages et inconvénients courants des tableaux ordonnés et des tableaux non ordonnés

Lors de la suppression de données, les données suivantes doivent être avancées pour remplir les éléments supprimés. Vulnérabilités

4. Implémentation du code


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;
   }
}

5.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn