国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Java > 正文

淺析java 希爾排序(Shell)算法

2019-11-26 15:18:25
字體:
供稿:網(wǎng)友

先取一個小于n的整數(shù)d1作為第一個增量,把文件的全部記錄分成d1個組。所有距離為dl的倍數(shù)的記錄放在同一個組中。先在各組內(nèi)進行直接插入排序;然后,取第二個增量d2<d1重復(fù)上述的分組和排序,直至所取的增量dt=1(dt<dt-l<;…<d2<d1),即所有記錄放在同一組中進行直接插入排序為止。
該方法實質(zhì)上是一種分組插入方法。

原理圖:

源代碼

復(fù)制代碼 代碼如下:

package com.zc.manythread;
/**
 *
 * @author 偶my耶
 *
 */
public class ShellSort {
    public static int count = 0;
    public static void shellSort(int[] data) {
        // 計算出最大的h值
        int h = 1;
        while (h <= data.length / 3) {
            h = h * 3 + 1;
        }
        while (h > 0) {
            for (int i = h; i < data.length; i += h) {
                if (data[i] < data[i - h]) {
                    int tmp = data[i];
                    int j = i - h;
                    while (j >= 0 && data[j] > tmp) {
                        data[j + h] = data[j];
                        j -= h;
                    }
                    data[j + h] = tmp;
                    print(data);
                }
            }
            // 計算出下一個h值
            h = (h - 1) / 3;
        }
    }
    public static void print(int[] data) {
        for (int i = 0; i < data.length; i++) {
            System.out.print(data[i] + "/t");
        }
        System.out.println();
    }
    public static void main(String[] args) {
        int[] data = new int[] { 4, 3, 6, 2, 1, 9, 5, 8, 7 };
        print(data);
        shellSort(data);
        print(data);
    }
}

運行結(jié)果:

Shell排序是不穩(wěn)定的,它的空間開銷也是O(1),時間開銷估計在O(N3/2)~O(N7/6)之間

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 五寨县| 兰西县| 平湖市| 高唐县| 彰武县| 安福县| 承德县| 滨海县| 象山县| 红河县| 长兴县| 秭归县| 营山县| 庄浪县| 中西区| 江永县| 宁强县| 杂多县| 象州县| 闽清县| 黔西| 广州市| 尚义县| 鄄城县| 丹棱县| 剑川县| 安顺市| 华坪县| 新竹县| 漾濞| 银川市| 保定市| 开远市| 汶上县| 永嘉县| 邻水| 孝义市| 绥江县| 福鼎市| 广州市| 高邑县|