希尔排序JAVA代码

package 备份类;

public class 希尔直插排序 {

    public static void main(String[] args) {

        int[] a = new int[] { 9, 8, 7, 6, 5, 4, 3, 2, 1, 10 };
        print(a);
        shellSort(a);
        print(a);

    }

    public static void shellSort(int[] a) {

        int d = 3;// 增量
        int gap = 1;// 间距

        // 计算出最大的gap值
        while (gap <= a.length / d) {
            gap = gap * d + 1;
        }

        // 组间的循环
        while (gap > 0) {

            // 一组内的循环
            for (int i = gap; i < a.length; i += gap) {

                if (a[i - gap] > a[i]) {
                    int tmp = a[i];
                    int j = i - gap;

                    while (j >= 0 && a[j] > tmp) {// 开始移动了
                        a[j + gap] = a[j];
                        j -= gap;
                    }

                    a[j + gap] = tmp;
                    print(a);
                }
            }
            // 计算出下一个gap值,开始下一组排序,下一组gap减小
            gap = (gap - 1) / d;
        }
    }

    public static void print(int[] a) {
        for (int i = 0; i < a.length; i++) {
            System.out.print(a[i] + "\t");
        }
        System.out.println();
    }

}
时间: 2024-10-10 16:18:57

希尔排序JAVA代码的相关文章

希尔排序及希尔排序java代码

原文链接:http://www.orlion.ga/193/ 由上图可看到希尔排序先约定一个间隔(图中是4),然后对0.4.8这个三个位置的数据进行插入排序,然后向右移一位对位置1.5.9进行插入排序按照此规律直到全部参与了排序.然后将间隔约定为4-1=3,然后继续进行如上的排序方法.具体过程如下: 9 1 2 3 0 4 5 7 6 8 Setp 1 经过间隔为4排序后变成 : 0 1 2 3 6 4 5 7 9 8 Setp 2 经过间隔为3排序后变成 : 0 1 2 3 6 4 5 7 9

希尔排序java

希尔排序简述 希尔排序是基于插入排序的以下两点性质而提出改进方法的: 插入排序在对几乎已经排好序的数据操作时,效率高,即可以达到线性排序的效率.(希尔排序先将部分数据进行排序,相当于已经部分排好序) 但插入排序一般来说是低效的,因为插入排序每次只能将数据移动一位.(希尔排序先将间隔大的数据进行大的移位,后期的移位距离相对要小很多) 分析: 先去一个小于n的整数的H作为第一个增量,把文件的全部记录分组.即将所有距离为H的倍数的记录放在同一个族中,先在各组内进行直接插入排序:然后去第二个增量重复上述

希尔排序(java)

时间复杂度为O( n^(3/2) )不是一个稳定的排序算法 如何看一个算法是否稳定:{("scala",12),("python",34),("c++",12),("c",76),("java",44)}scala和c++的值相等,排序前scala在c++的前面 如果排序后 {("scala",12),("c++",12),("python",34

希尔排序JAVA实现

package kpp.sort; /** * 希尔排序 * 1.设定步长d,每隔d个元素分为一组,组内插入排序; * 2.d/=2,重复1步骤,直到步长为1 * * 们知道一次插入排序是稳定的,但在不同的插入排序过程中,相同的元素可能在各自的插入排序中移动,最后其稳定性就会被打乱,所以希尔排序是不稳定的. 希尔排序的时间性能优于直接插入排序,原因如下: (1)当文件初态基本有序时直接插入排序所需的比较和移动次数均较少. (2)当n值较小时,n和n2的差别也较小,即直接插入排序的最好时间复杂度O

插入排序与希尔排序Java实现

public class TestMain { public static void main(String[] args) { Integer[] a = new Integer[5000]; for (int i = 0; i < a.length; i++) { int temp = (int)(StdRandom.random()*10000); a[i] = temp; } Integer[] b = new Integer[5000]; for (int i = 0; i < b.

计数排序Java代码实现

结论:由于计数排序不是基于比较的排序,所以时间复杂度可以突破O(nlgn);计数排序时间复杂度为O(n),额外空间复杂度为O(n); Java实现代码如下: 1 package com.cmbc.test1; 2 3 public class CountSorting { 4 5 public static void countSort(int[] arr){ 6 if(arr==null||arr.length<2){ 7 return; 8 } 9 int max = Integer.MIN

选择排序 java代码

1 public class Paixu_choice { 2 int[] a=new int[] {8,5,7,9,1,6,7,4,2,6}; 3 public static void main(String[] args) { 4 Paixu_choice h=new Paixu_choice(); 5 h.go(); 6 } 7 public void go(){ 8 int out,in,min; 9 for(out=0;out<a.length-1;out++){ 10 min=out

java希尔排序算法

原文:java希尔排序算法 代码下载地址:http://www.zuidaima.com/share/1550463279090688.htm 希尔排序算法的基本思想是:先取一个小于n的整数d1作为第一个增量,把文件的全部记录分成d1个组.所有距离为dl的倍数的记录放在同一个组中.先在各组内进行直接插人排序:然后,取第二个增量d2<d1重复上述的分组和排序,直至所取的增量dt=1(dt<dt-l<-<d2<d1),即所有记录放在同一组中进行直接插入排序为止.该方法实质上是一种

排序算法之希尔排序

文章转载自http://www.cnblogs.com/chengxiao/ 希尔排序是希尔(Donald Shell)于1959年提出的一种排序算法.希尔排序也是一种插入排序,它是简单插入排序经过改进之后的一个更高效的版本,也称为缩小增量排序,同时该算法是冲破O(n2)的第一批算法之一.本文会以图解的方式详细介绍希尔排序的基本思想及其代码实现. 希尔排序是把记录按下标的一定增量分组,对每组使用直接插入排序算法排序:随着增量逐渐减少,每组包含的关键词越来越多,当增量减至1时,整个文件恰被分成一组