//author:lilywangcn
public class ShellSort {
private static int[] array=new int[]{10,30,20,4, 9,-1,6,15,12,8,0,20,4};
public static void main(String[] args){
print();
for(int gap=array.length/2; gap>0; gap/=2){
System.out.println("gap="+gap);
for(int i=0;i<gap;i++){
insertosrt(i,gap);
}
print();
}
// print();
}
private static void insertosrt(int i,int gap){
for(int j=1;i+gap*j<array.length;j++){
int tmp=array[i+gap*j];
int k=j-1;
while(k>=0&& i+gap*k>=0 &&array[i+gap*k]>tmp ){
array[i+gap*(k+1)]=array[i+gap*k];
// print();
k--;
}
array[i+gap*(k+1)]=tmp;
// print();
}
}
private static void print(){
for(int i=0;i<array.length;i++){
System.out.print(array[i]+" ");
}
System.out.println("");
}
}
算法复杂度:O(n*n),算法不稳定
运行结果:
10 30 20 4 9 -1 6 15 12 8 0 20 4
gap=6
4 15 12 4 0 -1 6 30 20 8 9 20 10
gap=3
4 0 -1 4 9 12 6 15 20 8 30 20 10
gap=1
-1 0 4 4 6 8 9 10 12 15 20 20 30
分享到:
相关推荐
希尔排序的核心思想是“增量序列”,即在排序过程中,通过一系列间隔逐步缩小的步长对数组进行插入排序,直到步长为1,即所有元素都在同一个组内,完成最终排序。 在给出的代码中,希尔排序的实现分为两个主要函数...
本主题主要探讨了三种经典的排序算法——希尔排序、快速排序和堆排序,并在Java语言环境下通过多线程实现,以充分利用系统资源,提升排序性能。 希尔排序是一种基于插入排序的算法,由Donald Shell于1959年提出。它...
就利用汇编版的希尔排序来写了一下超级列表框排序.发现,从取值-排序-显示过程才花了1秒的时间.速度是七号排序的30倍,凌晨孤星-超级列表框排序的3倍.而这个希尔排序模块.只用增加,删减自定义数据类型成员.即可变身另...
Java代码-排序-直接插入排序、希尔排序、直接选择排序、冒泡排序、堆排序、快速排序、归并排序中部分排序以及算法-贪心法,大家可以将源码下载下来进行学习,附带着注释和解释,有不理解的可以找博主一起探讨,共同...
#### 四、希尔排序的时间复杂度分析 希尔排序的时间复杂度取决于增量序列的选择方式。一般而言,希尔排序的时间复杂度介于O(n)到O(n^2)之间。通过合理地选择增量序列可以显著提高排序效率,例如Hibbard增量序列(1,...
### 直接插入排序与希尔排序的比较 #### 一、概述 本篇文章将通过一组具体的数据集(8个整数)对直接插入排序(Direct Insertion Sort)和希尔排序(Shell Sort)这两种排序方法进行深入分析和比较。这两种排序...
输入n个整数,分别用希尔排序、快速排序、堆排序和归并排序实现由小到大排序并输出排序结果。要求n=10,15,20进行三组排序实验。 实验目的:掌握希尔排序、快速排序、堆排序、归并排序算法。 (zip中含代码及运行...
binary sort,二分法查找,binary search, 二分法排序,merge sort 混合排序,shell sort 希尔排序,insertion sort 插入排序。数据结构 data structure
根据提供的文件信息,我们可以深入探讨几种经典的排序算法:冒泡排序、直接插入排序、快速排序以及希尔排序。这些算法在数据结构与算法课程中是非常重要的基础内容,它们各自有着独特的特性和应用场景。 ### 1. ...
希尔排序(Shell Sort)是一种基于插入排序的快速排序算法,由Donald Shell于1959年提出。它的主要思想是将待排序的元素按照一定的间隔分组,对每组进行插入排序,然后逐渐减小间隔,直到间隔为1,此时整个序列视为...
希尔排序-flash演示
实现以下常用的内部排序算法并进行性能比较:"直接插入排序"," 折半插入排序"," 2—路插入排序"," 表插入排序"," 希尔排序"," 起泡排序"," 快速排序"," 简单选择排序"," 树形选择排序"," 堆排序"," 归并排序"," 链式...
希尔排序(Shell Sort)是由Donald Shell在1959年提出的一种基于插入排序的改进算法。它的主要思想是通过设置一系列的增量序列,逐步减少这些增量,将待排序的元素进行分组,然后在每个小组内进行直接插入排序。这个...
(1) 完成5种常用内部排序算法的演示,5种排序算法为:快速排序,直接插入排序,选择排序,堆排序,希尔排序; (2) 待排序元素为整数,排序序列存储在数据文件中,要求排序元素不少于30个; (3) 演示程序开始,...
本文将详细讲解六种经典的排序算法——合并排序、插入排序、希尔排序、快速排序、冒泡排序以及桶排序,并结合提供的文件名(sort.c、set.c、main.c、set.h、sort.h)推测出每个文件可能包含的代码实现。 1. **合并...
希尔排序(Shell Sort)是一种基于插入排序的快速排序方法,由Donald Shell于1959年提出。它的主要思想是将待排序的数据按照一定的间隔进行分组,然后对每组进行插入排序,随着间隔逐渐缩小,最后进行一次全排列,...
希尔排序算法详解 希尔排序(Shell Sort)是一种改进的插入排序算法,它的基本思想是将待排序的数组按照一定的间隔进行分组,对每组使用插入排序算法进行排序,然后缩小间隔,再对分组进行排序,直到间隔为1 为止。...
希尔排序 希尔排序 希尔排序 希尔排序 希尔排序
希尔排序(Shell Sort)是一种基于插入排序的快速排序算法,由Donald Shell于1959年提出。它的主要思想是将待排序的数据按照一定的增量分组,对每组使用直接插入排序,然后逐渐减小增量,继续进行分组排序,直到增量...
附件提供的是C语言实现的希尔排序的代码,同时提供了代码实现的结果