package com.sort.shell;
import java.util.Calendar;
import java.util.Random;
public class ShellSort {
public static void main(String[] args) {
Random random = new Random();
int nums[] = new int[100000];
for (int i = 0; i < nums.length; i++) {
nums[i] = random.nextInt(1000000);
}
int nums2[] = nums.clone();
long t1 = System.currentTimeMillis(); // 排序前取得当前时间
shellSort(nums);
System.out.println("--------after ShellSort--------");
long t2 = System.currentTimeMillis(); // 排序后取得当前时间
Calendar c = Calendar.getInstance();
c.setTimeInMillis(t2 - t1);
System.out.println("耗时: " + c.get(Calendar.MINUTE) + "分 "
+ c.get(Calendar.SECOND) + "秒 " + c.get(Calendar.MILLISECOND)
+ " 毫秒");
t1 = System.currentTimeMillis(); // 排序前取得当前时间
popSort(nums2);
System.out.println("--------after PopSort--------");
t2 = System.currentTimeMillis(); // 排序后取得当前时间
c.setTimeInMillis(t2 - t1);
System.out.println("耗时: " + c.get(Calendar.MINUTE) + "分 "
+ c.get(Calendar.SECOND) + "秒 " + c.get(Calendar.MILLISECOND)
+ " 毫秒");
}
private static void popSort(int[] nums) {
int len = nums.length;
for(int i=0;i<len;i++) {
for(int j=1;j<len;j++) {
if(nums[j-1] > nums[j] ) {
int temp = nums[j-1];
nums[j-1] = nums[j];
nums[j] = temp;
}
}
}
}
public static void shellSort(int nums[]) {
int h = 1;
int len = nums.length;
while (h < len) {
h = 3 * h + 1;
}
h = (h - 1) / 3;
while (h > 0) {
int inner, outer;
int temp;
for (outer = h; outer < len; outer++) {
temp = nums[outer];
inner = outer;
while (inner >= h && nums[inner - h] >= temp) {
nums[inner] = nums[inner - h];
inner -= h;
}
nums[inner] = temp;
}
h = (h - 1) / 3;
}
}
}
希尔排序与冒泡的对比·····
输出结果:
--------after ShellSort--------
耗时: 0分 0秒 32 毫秒
--------after PopSort--------
耗时: 1分 13秒 125 毫秒
分享到:
相关推荐
希尔排序 希尔排序希尔排序希尔排序希尔排序希尔排序希尔排序希尔排序
按下标的一定增量分组,对每组使用直接插入算法排序;随着增量 * 逐渐减少,每组包含的关键字越来越多,当增量减至1时,整个文件恰 * 好被分成一组,算法便终止。 * 8,9,1,7,2,3,5,4,6,0 * //初始增量 gap=...
该资源提供了一份全面的指南,介绍了如何在Java中实现希尔排序。文档中涵盖了希尔排序的基本概念,包括如何对数组进行排序以及如何在Java中实现希尔排序。此外,文档还包括一个逐步指南,介绍如何在Java中实现希尔...
Java实现希尔排序.rar
希尔排序 希尔排序.java 使用Java实现
NULL 博文链接:https://128kj.iteye.com/blog/1662282
希尔排序代码,其中是希尔排序的代码部分,又不知道的可以进来看一下
用java语言实现冒泡排序、插入排序、堆排序、快速排序、归并排序、希尔排序、桶排序,并且对各种排序算法进行性能的比较。
快速排序、归并排序、希尔排序、冒泡排序、选择排序、插入排序等8中排序方式原理分析java实现
希尔排序Java语言的易懂解释,本人Google搜索求得最佳答案,希望可以与朋友分享,给同样疑惑的朋友带来帮助。
实现合并排序,插入排序,希尔排序,快速排序,冒泡排序,桶排序算法的java实现。
详解Java常用排序算法-希尔排序
希尔排序
希尔排序
介绍希尔排序的概念、特点、优缺点、适用场景和java代码简单实现。
设计一个负责排序的程序包,实现多种排序算法,至少包括插入排序、冒泡排序和快速排序算法。 要求: 1.可以对任何简单类型和任意对象进行排序 2.可以支持升序、降序、字典排序等多种顺序要求 3.可以随意增加排序算法...
八种排序算法原理及Java实现( 冒泡排序+快速排序直接插入排序+希尔排序+选择排序+归并排序+基数排序)
主要介绍了Java 插入排序之希尔排序的实例的相关资料,需要的朋友可以参考下
用java实现了以下算法: 1、冒泡排序、冒泡排序的两种改进。 2、插入排序。 3、选择排序。 4、希尔排序。 5、归并排序。 6、快速排序。
主要介绍了使用Java实现希尔排序算法的简单示例,希尔排序可以被看作是插入排序的一种更高效的改进版本,需要的朋友可以参考下