希尔排序java版
2016-05-15 15:48
429 查看
希尔排序采用采取跳跃分隔的策略:将相距某个增量的记录组成一个子序列,将序列做到基本有序(小的关键字基本在前面,大的关键字基本在后面)
package 数据结构各种排序;
public class ShellSort {
public static void main(String args[]){
int[] data = {9,1,5,8,3,7,4,6,2};
for(int i=0;i<data.length;i++){
System.out.print("--"+data[i]);
}
System.out.println("\n排序之后:");
data = sort(data);
for(int i=0;i<data.length;i++){
System.out.print("--"+data[i]);
}
System.out.println();
}
//希尔排序过程,从小到大
public static int[] sort(int[] data){
//添加第一个数为哨兵
int[] tmp = new int[data.length+1];
tmp[0]=0;
for(int i=0;i<data.length;i++){
tmp[i+1] = data[i];
}
int i,j;
//设置增量
int increment = tmp.length;
//先执行再判断
do{
//增量可以根据实际来设置,不同的设置效率不一样,最终增量归1
increment = increment/3+1;
for(i=increment+1;i<tmp.length;i++){
if(tmp[i]<tmp[i-increment]){
tmp[0] = tmp[i];
for(j=i-increment;j>0&&tmp[0]<tmp[j];j-=increment){
tmp[j+increment] = tmp[j];
}
tmp[j+increment] = tmp[0];
}
}
}while(increment>1);
for(i=0;i<data.length;i++){
data[i] = tmp[i+1] ;
}
return data;
}
}
输出结果:
--9--1--5--8--3--7--4--6--2
排序之后:
--1--2--3--4--5--6--7--8--9
希尔排序并不是一种稳定的排序算法,但是希尔排序使得计算机突破了慢速排序的时代(o(n^2))。
package 数据结构各种排序;
public class ShellSort {
public static void main(String args[]){
int[] data = {9,1,5,8,3,7,4,6,2};
for(int i=0;i<data.length;i++){
System.out.print("--"+data[i]);
}
System.out.println("\n排序之后:");
data = sort(data);
for(int i=0;i<data.length;i++){
System.out.print("--"+data[i]);
}
System.out.println();
}
//希尔排序过程,从小到大
public static int[] sort(int[] data){
//添加第一个数为哨兵
int[] tmp = new int[data.length+1];
tmp[0]=0;
for(int i=0;i<data.length;i++){
tmp[i+1] = data[i];
}
int i,j;
//设置增量
int increment = tmp.length;
//先执行再判断
do{
//增量可以根据实际来设置,不同的设置效率不一样,最终增量归1
increment = increment/3+1;
for(i=increment+1;i<tmp.length;i++){
if(tmp[i]<tmp[i-increment]){
tmp[0] = tmp[i];
for(j=i-increment;j>0&&tmp[0]<tmp[j];j-=increment){
tmp[j+increment] = tmp[j];
}
tmp[j+increment] = tmp[0];
}
}
}while(increment>1);
for(i=0;i<data.length;i++){
data[i] = tmp[i+1] ;
}
return data;
}
}
输出结果:
--9--1--5--8--3--7--4--6--2
排序之后:
--1--2--3--4--5--6--7--8--9
希尔排序并不是一种稳定的排序算法,但是希尔排序使得计算机突破了慢速排序的时代(o(n^2))。
相关文章推荐
- java对世界各个时区(TimeZone)的通用转换处理方法(转载)
- java-注解annotation
- java-模拟tomcat服务器
- java-用HttpURLConnection发送Http请求.
- java-WEB中的监听器Lisener
- Android IPC进程间通讯机制
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- 介绍一款信息管理系统的开源框架---jeecg
- 聚类算法之kmeans算法java版本
- java实现 PageRank算法
- PropertyChangeListener简单理解
- 在命令行用 sort 进行排序
- c++11 + SDL2 + ffmpeg +OpenAL + java = Android播放器
- 插入排序
- 冒泡排序
- 堆排序
- 快速排序