JAVA实现Shell排序
来源:互联网 发布:苹果视频直播软件 编辑:程序博客网 时间:2024/05/19 08:42
Shell排序可以理解为插入排序的变种,它充分利用了插入排序的两个特点:
(1). 当数据规模小的时候非常高效。
(2). 当给定数据已经有序时的时间代价为O(N)
所以,Shell排序每次把数据分成若干块,来使用插入排序,而且之后在这若干个小块排好序的情况下把它们合成大一点的小块,继续使用插入排序,不停的合并小块,知道最后一个块,并使用插入排序。
这里每次分成若干小块是通过“增量”来控制的,开始时增量较大,接近N/2,从而使得分割出来接近N/2个小块,逐渐的减小“增量”最终到减小到1.
一直较好的增量序列是2^k-1,2^(k-1)-1,.....7,3,1,这样可使Shell排序时间复杂度达到O(N^1.5),所以在实现Shell排序的时候采用该增量序列
publicabstractclass Sorter<Eextends Comparable<E>> {
publicabstractvoid sort(E[] array,int from ,int len);
publicfinalvoid sort(E[] array)
{
sort(array,0,array.length);
}
protectedfinalvoid swap(E[] array,int from ,int to)
{
E tmp=array[from];
array[from]=array[to];
array[to]=tmp;
}
publicvoid sort(String helloString,int from,int len) {
// TODO Auto-generated method stub
}
}
publicclass ShellSorter <Eextends Comparable<E>>extends Sorter<E>{
publicstaticvoid main(String[] args){
String[] myStringArray1 = {"1","3","2","4","6","5"};
ShellSorter<String> s1 = new ShellSorter<String>();
for(int i=0;i<6;i++){
System.out.println(myStringArray1[i]);
}
s1.sort(myStringArray1, 0, 6);
}
@Override
publicvoid sort(E[] array,int from,int len) {
// TODO Auto-generated method stub
int value=1;
while((value+1)*2<len){
value=(value+1)*2-1;
}
for(int delta=value;delta>=1;delta=(delta+1)/2-1){
for(int i=0;i<delta;i++){
modify_insert_sort(array,from+i,len-i,delta);
}
}
}
privatefinalvoid modify_insert_sort(E[] array,int from,int len,int delta){
if(len<=1)return;
E tmp=null;
for(int i=from+delta;i<from+len;i+=delta){
tmp=array[i];
int j=i;
for(;j>from;j-=delta){
if(tmp.compareTo(array[j-delta])<0){
array[j]=array[j-delta];
}else{
break;
}
array[j]=tmp;
}
}
}
}
- JAVA实现Shell排序
- java实现shell排序
- Java实现希尔(Shell)排序
- Java实现插入,shell排序
- Java实现Shell排序算法
- 排序算法(Java实现):Shell排序和归并排序
- 希尔(Shell)排序 Java实现
- Shell、归并排序、递归的java实现
- Shell(希尔)排序(java实现)
- Java实现排序(插入排序+冒泡排序+选择排序+ Shell排序+快速排序)
- JAVA排序算法实现代码-希尔Shell排序
- Java实现-高效排序算法之Shell排序
- shell脚本实现shell排序
- 排序算法--插入排序(直接插入排序、折半插入、shell排序)的java实现
- Java实现——选择排序、shell排序、合并排序、堆排序
- shell排序的实现
- shell排序C实现
- 快速排序 shell实现
- 设备坐标和逻辑坐标
- form 中Enctype=multipart/form-data 的作用
- SQL简单的日报和月报
- 管好自己的嘴
- 面向对象编程3大特性 7大原则
- JAVA实现Shell排序
- linux的list常用函数用法速查及应用实例
- linux之间文件传输(sftp)
- 【GBT28181开发:SIP协议实践】之Windows下编译eXosip、osip
- 析构函数
- MySql 远程连接 配置
- android面试题 不单单为了面试也是一次很好的学习
- 《前端开发修炼之道》学习感悟
- aix memcached 安装及启动