public class ShellSort {
// is v < w ?
private static boolean less(Comparable v, Comparable w) {
return v.compareTo(w) < 0;
}
private static boolean isSorted(List<Entity> arr) {
for (int i = 1; i < arr.size(); i++)
if (less(arr.get(i), arr.get(i-1))) return false;
return true;
}
public static void main(String[] args) {
Random random = new Random();
List<Entity> entities = new ArrayList<>();
List<Entity> temp = new ArrayList<>();
for (int i = 0;i < 10000000;++i){
Entity entity = new Entity(random.nextInt(30000000));
entities.add(entity);
}
temp.addAll(entities);
long start = System.currentTimeMillis();
shellsSort(entities);
long end = System.currentTimeMillis();
System.out.println("shellsSort :"+(end - start) / 1000);
assert isSorted(entities);
start = System.currentTimeMillis();
InsertSort.InsertSort(temp);
end = System.currentTimeMillis();
System.out.println("InsertSort :"+(end - start) / 1000);
assert isSorted(temp);
}
public static void shellsSort(List<Entity> arr) {
if (arr == null){
return;
}
int i,j,k,h;
for(h=arr.size()/2; h>0; h/=2){ //間隙
for (i = 0;i < h;i++){
for (j = i+h;j < arr.size(); j+=h ){
k = j;
while (j-h >=0 && arr.get(j).compareTo(arr.get(j-h)) < 0){
Entity min = arr.get(j);
Entity max = arr.get(j-h);
arr.set(j,max);
arr.set(j-h,min);
j-=h;
}
j = k;
}
}
}
}
}
希爾排序 與 直接插入排序運行比較
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.