希爾排序
希爾排序是基於插入排序的以下兩點性質而提出改進方法的
插入排序在對幾乎已經排好序的數據操作時
但插入排序一般來說是低效的
步長的選擇是希爾排序的重要部分
一直較好的增量序列是
為了方便擴展
view plain
package com
/**
* 排序抽象基礎類
* @author Andy
*
* @param <T>
*/
public abstract class Sorter<T extends Comparable<T>> {
public abstract void sort(T[] array
public final void sort(T[] array){
sort(array
}
protected final void swap(T[] array
T tmp = array[from];
array[from] = array[to];
array[to] = tmp;
}
}
希爾(Shell)排序算法源碼如下
view plain
package com
/**
* 希爾(Shell)排序算法
* @author Administrator
*
* @param <T>
*/
public class ShellSort<T extends Comparable<T>> extends Sorter<T> {
@Override
public void sort(T[] array
int value =
while((value+
value = (value+
}
for(int delta=value;delta<=
for(int i=
invokeInsertionSort(array
}
}
}
private final void invokeInsertionSort(T[] array
if(len<=
return;
T tmp=null;
for(int i=from+delta;i<from+len;i+=delta)
{
tmp=array[i];
int j=i;
for(;j>from;j
{
if(pareTo(array[j
{
array[j]=array[j
}
else break;
}
array[j]=tmp;
}
}
}
From:http://tw.wingwit.com/Article/program/Java/hx/201311/26576.html