Java常用算法

算法是很重要的东西, 总结一下供以后参考!

 通用抽象类

 

public abstract class Sorter<E extends Comparable<E>> {
    
    public abstract void sort(E[] array,int from ,int len);
    
    public final void sort(E[] array)
    {
        sort(array,0,array.length);
    }
    protected final void swap(E[] array,int from ,int to)
    {
        E tmp=array[from];
        array[from]=array[to];
        array[to]=tmp;
    }

}

 

一  插入排序法:

说明:  每次将一个待排序的记录,按其关键字大小插入到前面已经排好序的子文件中的适当位置,直到全部记录插入完成为止。

public class InsertSorter<E extends Comparable<E>> extends Sorter<E> {

    /**
     * from  起始位置
     * len   从起始位置开始 需要比较的次数
     */
    public void sort(E[] array, int from, int len) {
         E tmp=null;
          for(int i=from+1;i<from+len;i++){
              tmp=array[i];
              int j=i;
              for(;j>from;j--){
                  if(tmp.compareTo(array[j-1])<0){
                      array[j]=array[j-1];
                  }
                  else break;
              }
              array[j]=tmp;
          }
    }
}

 

 

 

 

 

 二  冒泡排序法:

 

说明:  算法思想是每次从数组末端开始比较相邻两元素,把第i小的冒泡到数组的第i个位置。i从0一直到N-1从而完成排序。(当然也可以从数组开始端开始比较相邻两元素,把第i大的冒泡到数组的第N-i个位置。i从0一直到N-1从而完成排序。)

 

 

public class BubbleSorter<E extends Comparable<E>> extends Sorter<E> {

    private static  boolean DWON=true;
    
    public final void bubble_down(E[] array, int from, int len)
    {
        for(int i=from;i<from+len;i++)
        {
            for(int j=from+len-1;j>i;j--)
            {
                if(array[j].compareTo(array[j-1])<0)
                {
                    swap(array,j-1,j);
                }
            }
        }
    }
    
    public final void bubble_up(E[] array, int from, int len)
    {
        for(int i=from+len-1;i>=from;i--)
        {
            for(int j=from;j<i;j++)
            {
                if(array[j].compareTo(array[j+1])>0)
                {
                    swap(array,j,j+1);
                }
            }
        }
    }
    @Override
    public void sort(E[] array, int from, int len) {
        
        if(DWON)
        {
            bubble_down(array,from,len);
        }
        else
        {
            bubble_up(array,from,len);
        }
    }
    
}

 

 三  选择排序法:

 

说明: 选择排序相对于冒泡来说,它不是每次发现逆序都交换,而是在找到全局第i小的时候记下该元素位置,最后跟第i个元素交换,从而保证数组最终的有序。相对与插入排序来说,选择排序每次选出的都是全局第i小的,不会调整前i个元素了。

 

public class SelectSorter<E extends Comparable<E>> extends Sorter<E> {

	 @Override
	    public void sort(E[] array, int from, int len) {
	        for(int i=0;i<len;i++){
	            int smallest=i;
	            int j=i+from;
	            for(;j<from+len;j++){
	                if(array[j].compareTo(array[smallest])<0)
	                    smallest=j;
	            }
	            swap(array,i,smallest);          
	        }
	    }
}

  

 

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