java常用排序演算法

xiayanyang1988發表於2011-02-15

一  順序查詢 
     
    前提條件:無 
    從所傳入集合的一段開始,順序掃描,並以此將掃描到的值與所傳如德key值進行比較。若有值與其相等,則表明查詢成功;若掃描結束後仍沒有值與key值相等,則表明查詢失敗。 
   
    示例程式碼: 
    public int SeqSearch(int[] r, int k){   
       // 在順序表R[0..n]中順序查詢關鍵字為k的結點, 
        // 成功時返回找到的結點位置,失敗時返回0 
        for(int i = r.length - 1; i >= 0; i--) //從表後往前找 
        { 
            if(r[i] == k) 
            { 
                return i;  //若i為-1,表示查詢失敗,否則R[i]是要找的結點 
            } 
        } 
        return -1; 
    } 
    缺點:執行效率低 
    優點:實現方式簡單,比較容易好理解,對集合的資料結構沒什麼要求 


二  二分查詢 
    
    前提條件:集合有序排列(遞增、遞減) 
   1  確定查詢範圍,獲取該區間的中間位置:middle=(low+high)/2 
   2  然後將待查的K值與R[mid]比較:若相等,則查詢成功並返回此位置,否則須確 
       定新的查詢區間,繼續二分查詢。 
       ① 若R[mid] > K,則由陣列的有序性可知R[mid..n]均大於K,因此該結點必定是 
           在位置mid左邊的R[0..mid-1]中 
       ② 若R[mid] < K,則要查詢的K必在mid的右邊的R[mid+1..n]中,下一次查詢是 
           針對新的查詢區間進行的。 
   3  因此,從初始的查詢區間R[1..n]開始,每經過一次與當前查詢區間的中點位置上的 
       結點關鍵字的比較,就可確定查詢是否成功,不成功則當前的查詢區間就縮小一半。 
       這一過程重複直至找到關鍵字為K的結點,或者直至當前的查詢區間為空(即查詢失 
       敗)時為止。 
       
       示例程式碼: 
       
       public  int  dichotomyMethod(int[] arrys,int keyValue){ 
          
          int middle; 
          int low=0; 
          int high=arrys.length-1; 
          while(low<=high){ 
              middle=(low+high)/2 
              if(arrys[middle]==keyValue){ 
                  return middle; 
              }else if(arrys[middle]<keyValue){ 
                  low=middle+1;              
              }else{ 
                   high=middle-1; 
              } 
          } 
          return -1; 
      } 

相關文章