国产探花免费观看_亚洲丰满少妇自慰呻吟_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ā)表
主站蜘蛛池模板: 南江县| 恩平市| 定边县| 睢宁县| 涞水县| 秦安县| 景德镇市| 驻马店市| 永修县| 江西省| 蓝山县| 苗栗县| 广南县| 温泉县| 平凉市| 大足县| 安岳县| 元阳县| 安仁县| 嘉鱼县| 奈曼旗| 玉龙| 建平县| 广宁县| 金川县| 马公市| 东乡县| 莱阳市| 怀宁县| 泸定县| 旅游| 山阴县| 青龙| 武穴市| 黄浦区| 麻阳| 和平县| 宜君县| 蒙山县| 得荣县| 得荣县|