您的位置:首页 > 其它

算法学习(11)--高级排序之希尔排序

2010-12-26 15:30 232 查看
package com.tw.ds.highsort;

/**
*
* <p>
* 算法学习---高级排序
* 希尔排序算法
* 基本思想: 先取一个小于n的整数d1作为第一个增量,把文件的全部记录分成d1个组。
* 所有距离为dl的倍数的记录放在同一个组中。
* 先在各组内进行直接插人排序;然后,取第二个增量d2<d1重复上述的分组和排序,
* 直至所取的增量dt=1(dt<dt-l<…<d2<d1),即所有记录放在同一组中进行直接插入排序为止。
* 该方法实质上是一种分组插入方法。
* </p>
* @author tangw 2010-11-26
*
*/
public class ShellSortMain {

/**
* @param args
*/
public static void main(String[] args) {
//数据变量
int [] ardata = {2,5,1,6,8,0,9,100,2};
//排序
shellSort(ardata);
//输出
for(int i=0;i<ardata.length;i++){
System.out.println("i="+i+"  v="+ardata[i]);
}
}

/**
* <p>希尔排序方法</p>
* @param data
*/
public static void shellSort(int []data){//递减
int j;
for(int count=data.length/2;count>0;count/=2){
for(int y=count;y<data.length;y++){
int temp = data[y];
for(j=y;j>=count && temp>data[j-count];j-=count){
data[j] = data[j-count];
}
data[j] = temp;
}
}
}//end method shellSort
}

/**
* 排序前数据:2,5,1,6,8,0,9,100,2
* 排序后数据: 100,9,8,6,5,2,2,1,0
*
*
* */
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: