希尔排序是对直接插入排序算法的一种改进,其基本原理就是让一个无序的数列变得“基本有序”,那么在最后进行直接插入排序的时候时间复杂度将会降低很多(在理想情况下,如果一个数列是有序的,那么使用直接插入排序的算法时间复杂度为O(n));希尔排序算法的效率和“步长”的定义息息相关,但是如何给出一个步长使得希尔排序算法的效率最高,是非常困难的。
import java.util.Scanner; public class ShellInsertSort{ public static void main(String args[]){ Scanner scanner=new Scanner(System.in); int total=scanner.nextInt(); int[] array=new int[1024]; for(int i=0;i<total;i++){ array[i]=scanner.nextInt(); } //定义步长数组 int[] step={10,8,6,5,4,3,2,1}; shellSort(array,total,step); output(array,total); } public static void output(int[] array,int total){ for(int i=0;i<total;i++){ System.out.print(array[i]+" "); } System.out.println(); } /** 参数说明: array:待排数组; total:数组长度; step:步长定义 */ public static void shellSort(int[] array,int total,int[] step){ for(int i=0;i<step.length;i++){ int dk=step[i]; int temp=0; for(int j=dk;j<total;j++){ if(array[j]<array[j-dk]){ temp=array[j]; int k=0; for(k=j-dk;k>=0&&temp<array[k];k-=dk){ array[k+dk]=array[k]; } array[k+dk]=temp; } } } } }
测试用例:仍然使用MyRandom类生成1024个打乱的整数:
import java.util.Random; public class MyRandom { public static void main(String args[]){ int[] array=new int[1024]; for(int i=0;i<1024;i++){ array[i]=i; } for(int i=0;i<=1023;i++){ int m=new Random().nextInt(1024); int n=new Random().nextInt(1024); int temp=array[m]; array[m]=array[n]; array[n]=temp; } System.out.println("1024"); for(int i=0;i<1024;i++){ System.out.print(array[i]+" "); } System.out.println(); } }
运行方法:
java MyRandom | java ShellSort
运行结果:
相关推荐
数据结构 综合排序 冒泡排序 直接插入排序 快速排序 希尔排序,完整的代码,有每种排序时间的比较
《数据结构》严蔚敏版——希尔排序
数据结构排序一章的希尔结构排序,显示结果的
数据结构 希尔排序 演示 一看就懂 非常直观
实现以下常用的内部排序算法并进行性能比较:"直接插入排序"," 折半插入排序"," 2—路插入排序"," 表插入排序"," 希尔排序"," 起泡排序"," 快速排序"," 简单选择排序"," 树形选择排序"," 堆排序"," 归并排序"," 链式...
通过这个程序就可以实现希尔排序,对数据用希尔进行排序
此希尔排序算法采用增量减半的方法来进行数据的排序,内有部分注释
C 排序 数据结构 链表 堆排序 希尔排序 快速排序 递归排序。详细解释了每个排序方法原理,并带有程序代码。是学习C语言的绝好资料
一个数据结构作业,对刚刚学习希尔排序知识的同学有用,用C++做的
python数据结构与算法分析,希尔排序法实现,希尔排序.py
一、实验目的 1、掌握排序的不同方法,并能用高级语言实现排序算法 二、实验内容 1、实现希尔排序算法。
数据结构里面的希尔排序,用C语言实现的完整示例程序
希尔排序法,最经典的排序法,但不是容易懂。包括希尔插入排序,希尔交换排序
数据结构 排序算法 快速排序 堆排序 冒泡 选择排序 折半排序 希尔排序 归并排序 插入
编写一个程序实现希尔插入排序过程,并输入{9,8,7,6,5,4,3,2,1,0}的排序过程。希尔排序又称“缩小增量排序”,也是一种插入排序的分析方法,但是在时间效率上较高。
附件提供的是C语言实现的希尔排序的代码,同时提供了代码实现的结果
数据结构上机:题目: 排序 输人10个整数,分别用希尔排序、快速排序、直接选择排序和归并排序实现由小到大排序并输出排序结果。