首頁  >  文章  >  Java  >  淺析java 希爾排序(Shell)演算法

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

高洛峰
高洛峰原創
2017-01-17 13:20:001425瀏覽

先取一個小於n的整數d1作為第一個增量,把檔案的全部記錄分成d1個組。所有距離為dl的倍數的記錄放在同一個組別中。先在各組內進行直接插入排序;然後,取第二個增量d2該方法實質上是一種分組插入方法。

原理圖:

浅析java 希尔排序(Shell)算法

原始碼

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);
    }
}

運行結果:

浅析java 希尔排序(Shell)算法

Shell排序是不穩定的,它的空間開銷也是O(

Shell排序是不穩定的,它的空間開銷也是O(1),時間開銷是O(11) ~O(N7/6)之間

更多淺析java 希爾排序(Shell)演算法相關文章請關注PHP中文網!

🎜🎜
陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn