当前位置:   article > 正文

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

希尔排序和插入排序哪个
我的希尔排序代码
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

这结果真让我失望,因为希尔排序就是插入排序的改良版,怎么效率比插入排序还要低呢?是我的程序写错了吗?请指教
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/秋刀鱼在做梦/article/detail/786855
推荐阅读
相关标签
  

闽ICP备14008679号