java常用算法

通用抽象类

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

你可能感兴趣的:(java,算法,J#,UP)