排序算法复习(Java实现)(一): 插入,冒泡,选择,Shell,快速排序

为了便于管理,先引入个基础类:
package  algorithms;

/**
 * 
@author  yovn
 *
 
*/
public   abstract   class  Sorter < 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;
    }

}
一 插入排序
该算法在数据规模小的时候十分高效,该算法每次插入第K+1到前K个有序数组中一个合适位置,K从0开始到N-1,从而完成排序:
package  algorithms;
/**
 * 
@author  yovn
 
*/
public   class  InsertSorter < extends  Comparable < E >>   extends  Sorter < E >  {

    
/*  (non-Javadoc)
     * @see algorithms.Sorter#sort(E[], int, int)
     
*/
    
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从而完成排序。)

package  algorithms;

/**
 * 
@author  yovn
 *
 
*/
public   class  BubbleSorter < 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);
        }
    }
    
}

你可能感兴趣的:(职场,休闲)