学习笔记 插入排序算法博客中能找到
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;
}
}
}
}
}
本文深入探讨了希尔排序算法的实现与优化,通过与插入排序的比较,展示了希尔排序在大规模数据集上的效率优势。文章提供了详细的Java代码示例,包括实体类的创建、随机数据生成、排序算法的实现及性能测试。
6888

被折叠的 条评论
为什么被折叠?



