现在的位置: 首页 > 综合 > 正文

Java排序算法

2014年01月26日 ⁄ 综合 ⁄ 共 2410字 ⁄ 字号 评论关闭

一  插入排序法:

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


Java代码
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从而完成排序。)



Java代码
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个元素了。


 


Java代码
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);            
            }  
        }  

抱歉!评论已关闭.