希尔排序和插入排序,哪个更快些

我的希尔排序代码

package sort;

import static print.Print.printhh;
import static print.Print.printsz;

public class ShellSort {

public static void main(String[] args) {
int[] data = {9,8,7,6,5,4,3,2,1,0};
ShellSort shellSort = new ShellSort();
long begin = System.currentTimeMillis();
for (int i = 0 ; i < 100000000 ; i++){
shellSort.sort(data);
}
long end = System.currentTimeMillis();
printhh ("希尔排序所用时间:"+(end-begin)/1000);
printsz (data);
}

public void sort(int[] data){
for (int i = data.length/2 ; i > 0 ; i/=2)
for (int j = 0 ; j < i ; j++)
insertSort (data,j,i);
}

public void insertSort(int[] data , int start , int inc){
for (int i = start + inc ; i < data.length ; i += inc)
for (int j = i ; (j >= inc) && (data[j] < data[j-inc]) ; j -= inc)
swap(data,j,j-inc);
}

public void swap(int[] data , int i , int j){
int temp = data[i];
data[i] = data[j];
data[j] = temp;
}

}

我的插入排序代码

package sort;
import static print.Print.*;
public class InsertSort {

public static void main(String[] args){
int[] data = {9,8,7,6,5,4,3,2,1,0};
InsertSort insertSort = new InsertSort();
long begin = System.currentTimeMillis();
for (int i = 0 ; i < 100000000 ; i++){
insertSort.sort(data);
}
long end = System.currentTimeMillis();
printhh ("插入排序所用时间:"+(end-begin)/1000);
printsz (data);
}

public void sort(int[] data){
for (int i = 1 ; i < data.length ; i++)
for (int j = i ; (j>0) && (data[j]<data[j-1]) ; j--)
swap(data,j,j-1);
}

public void swap(int[] data , int i , int j){
int temp = data[i];
data[i] = data[j];
data[j] = temp;
}

}



运行结果如下:
希尔排序所用时间:26
0 1 2 3 4 5 6 7 8 9
===============
插入排序所用时间:5
0 1 2 3 4 5 6 7 8 9

这结果真让我失望,因为希尔排序就是插入排序的改良版,怎么效率比插入排序还要低呢?是我的程序写错了吗?请指教
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值