前篇:递归之归并排序  http://wen5566.blog.51cto.com/1040211/464785

 

  1. package com.tw.ds.highsort;  
  2.  
  3. /**  
  4.  *   
  5.  * <p>  
  6.  * 算法学习---高级排序  
  7.  * 希尔排序算法  
  8.  * 基本思想: 先取一个小于n的整数d1作为第一个增量,把文件的全部记录分成d1个组。  
  9.  * 所有距离为dl的倍数的记录放在同一个组中。  
  10.  * 先在各组内进行直接插人排序;然后,取第二个增量d2<d1重复上述的分组和排序,   
  11.  * 直至所取的增量dt=1(dt<dt-l<…<d2<d1),即所有记录放在同一组中进行直接插入排序为止。  
  12.  * 该方法实质上是一种分组插入方法。  
  13.  * </p>  
  14.  * @author tangw 2010-11-26  
  15.  *  
  16.  */ 
  17. public class ShellSortMain {  
  18.       
  19.     /**  
  20.      * @param args  
  21.      */ 
  22.     public static void main(String[] args) {  
  23.         //数据变量  
  24.         int [] ardata = {2,5,1,6,8,0,9,100,2};  
  25.         //排序  
  26.         shellSort(ardata);  
  27.         //输出  
  28.         for(int i=0;i<ardata.length;i++){  
  29.             System.out.println("i="+i+"  v="+ardata[i]);  
  30.         }  
  31.     }  
  32.       
  33.     /**  
  34.      * <p>希尔排序方法</p>  
  35.      * @param data  
  36.      */ 
  37.     public static void shellSort(int []data){//递减  
  38.         int j;  
  39.         for(int count=data.length/2;count>0;count/=2){  
  40.             for(int y=count;y<data.length;y++){  
  41.                 int temp = data[y];  
  42.                 for(j=y;j>=count && temp>data[j-count];j-=count){  
  43.                     data[j] = data[j-count];  
  44.                 }  
  45.                 data[j] = temp;   
  46.             }  
  47.         }  
  48.     }//end method shellSort  
  49. }  
  50.  
  51.  
  52. /**  
  53.  * 排序前数据:2,5,1,6,8,0,9,100,2  
  54.  * 排序后数据: 100,9,8,6,5,2,2,1,0  
  55.  *   
  56.  *   
  57.  * */ 

 后续有更多算法学习之博客文章,会陆续发上来