插入排序 与 希尔排序 效率对比

本文通过具体的Java代码实现,对比了希尔排序与插入排序两种算法的执行效率。实验结果显示,在相同的数据集下,希尔排序的平均执行时间短于插入排序,证明了希尔排序在处理大量数据时具有更高的效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

public class Suanfa {
	
	final static int COUNT = 500000;
	final static int[] array = new int[COUNT];
	//初始化数据
	static {
		Random random  = new Random();
		for (int i = 0; i < COUNT; i++) {
			array[i] = random.nextInt(COUNT * 5);
		}
		print(array);
		System.out.println("..............排序中..............");
	}
	
	public static void main(String[] args) throws InterruptedException, ExecutionException {
		 long h = test(new Hill());
		 System.out.println("希尔排序 平均时间 " + h);
		 long i = test(new Insertion());
		 System.out.println("插入排序 平均时间 " + i);
	}
	
	static long test(Sort sort) throws InterruptedException, ExecutionException{
		FutureTask<Long> future = new FutureTask<Long>(new SortThread(sort,array));
		new Thread(future).start();
		return future.get();
	}
	
	//排序线程
	static class SortThread implements Callable<Long> {
		private Sort sort;
		private int[] item;
		public SortThread(Sort sort,int[] item){
			this.sort = sort;
			this.item = Arrays.copyOf(item, item.length);
		}
		public Long call() throws Exception {
			long s = System.currentTimeMillis();
			int[] ss = sort.get(item);
			long e = System.currentTimeMillis();
			print(ss);
			return e - s;
		}
	}
	
	//排序接口
	interface Sort {
		int[] get(int items[]);
	}
	
	//希尔排序
	static class Hill implements Sort{
		public int[] get(int item[]) {
			int len = item.length;
			int i,j;
			int d = len >> 1;
			while(d > 0) {
				for(i=d;i<len;i++){
					j = i-d;
					while(j >= 0 && item[j] > item[j+d]){
						int temp = item[j];
						item[j] = item[j+d];
						item[j+d] = temp;
						j -= d;
					}
				}
				d = d >> 1;
			}
			return item;
		}
	}
	
	//插入排序
	static class Insertion implements Sort{
		public int[] get(int item[]) {
			for (int i = 1; i < item.length; i++) {
				if(item[i] < item[i-1]) {
					int k = item[i];
					int j = i - 1;
					item[i] = item[i-1];
					while(j > -1 && k < item[j]){
						item[j+1]=item[j];
						j--;
					}
					item[j+1] = k;
				}
			}
			return item;
		}
	}
	
	
	static void print(int[] items){
/*		StringBuffer sb = new StringBuffer();
		for (int i = 0; i < items.length; i++) {
			sb.append(items[i]).append(",");
		}
		sb.deleteCharAt(sb.length()-1);
		System.out.println(sb);*/
	}
	
}

执行效率

还是希尔排序效率高

转载于:https://my.oschina.net/shking/blog/163362

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值