java常用演算法

xiayanyang1988發表於2011-02-15

通用抽象類

Java程式碼 
  1. public abstract class Sorter<E extends Comparable<E>> {  
  2.       
  3.     public abstract void sort(E[] array,int from ,int len);  
  4.       
  5.     public final void sort(E[] array)  
  6.     {  
  7.         sort(array,0,array.length);  
  8.     }  
  9.     protected final void swap(E[] array,int from ,int to)  
  10.     {  
  11.         E tmp=array[from];  
  12.         array[from]=array[to];  
  13.         array[to]=tmp;  
  14.     }  
  15.   
  16. }  

 一  插入排序法:

說明:   每次將一個待排序的記錄,按其關鍵字大小插入到前面已經排好序的子檔案中的適當位置,直到全部記錄插入完成為止。

Java程式碼 
  1. public class InsertSorter<E extends Comparable<E>> extends Sorter<E> {  
  2.   
  3.     /** 
  4.      * from  起始位置 
  5.      * len   從起始位置開始 需要比較的次數 
  6.      */  
  7.     public void sort(E[] array, int from, int len) {  
  8.          E tmp=null;  
  9.           for(int i=from+1;i<from+len;i++){  
  10.               tmp=array[i];  
  11.               int j=i;  
  12.               for(;j>from;j--){  
  13.                   if(tmp.compareTo(array[j-1])<0){  
  14.                       array[j]=array[j-1];  
  15.                   }  
  16.                   else break;  
  17.               }  
  18.               array[j]=tmp;  
  19.           }  
  20.     }  
  21. }  

 二  氣泡排序法:

說明:   演算法思想是每次從陣列末端開始比較相鄰兩元素,把第i小的冒泡到陣列的第i個位置。i從0一直到N-1從而完成排序。(當然也可以從陣列開始端開始比較相鄰兩元素,把第i大的冒泡到陣列的第N-i個位置。i從0一直到N-1從而完成排序。)

Java程式碼 
  1. public class BubbleSorter<E extends Comparable<E>> extends Sorter<E> {  
  2.   
  3.     private static  boolean DWON=true;  
  4.       
  5.     public final void bubble_down(E[] array, int from, int len)  
  6.     {  
  7.         for(int i=from;i<from+len;i++)  
  8.         {  
  9.             for(int j=from+len-1;j>i;j--)  
  10.             {  
  11.                 if(array[j].compareTo(array[j-1])<0)  
  12.                 {  
  13.                     swap(array,j-1,j);  
  14.                 }  
  15.             }  
  16.         }  
  17.     }  
  18.       
  19.     public final void bubble_up(E[] array, int from, int len)  
  20.     {  
  21.         for(int i=from+len-1;i>=from;i--)  
  22.         {  
  23.             for(int j=from;j<i;j++)  
  24.             {  
  25.                 if(array[j].compareTo(array[j+1])>0)  
  26.                 {  
  27.                     swap(array,j,j+1);  
  28.                 }  
  29.             }  
  30.         }  
  31.     }  
  32.     @Override  
  33.     public void sort(E[] array, int from, int len) {  
  34.           
  35.         if(DWON)  
  36.         {  
  37.             bubble_down(array,from,len);  
  38.         }  
  39.         else  
  40.         {  
  41.             bubble_up(array,from,len);  
  42.         }  
  43.     }  
  44.       
  45. }  
 

 三   選擇排序法:

說明: 選擇排序相對於冒泡來說,它不是每次發現逆序都交換,而是在找到全域性第i小的時候記下該元素位置,最後跟第i個元素交換,從而保證陣列最終的有序。相對與插入排序來說,選擇排序每次選出的都是全域性第i小的,不會調整前i個元素了。

Java程式碼 
  1. public class SelectSorter<E extends Comparable<E>> extends Sorter<E> {  
  2.   
  3.      @Override  
  4.         public void sort(E[] array, int from, int len) {  
  5.             for(int i=0;i<len;i++){  
  6.                 int smallest=i;  
  7.                 int j=i+from;  
  8.                 for(;j<from+len;j++){  
  9.                     if(array[j].compareTo(array[smallest])<0)  
  10.                         smallest=j;  
  11.                 }  
  12.                 swap(array,i,smallest);            
  13.             }  
  14.         }  
  15. }  

相關文章