希爾排序——Java實現


一、排序思想

       希爾排序(Shell’s Sort)是插入排序的一種,是直接插入排序算法的一種更高版本的改進版本。

  1. 把記錄按步長gap分組,對每組記錄采用直接插入排序方法進行排序;
  2. 隨着步長逐漸減小,所分成的組包含的記錄越來越多;
    當步長值減小到1時,整個數據合成一組,構成一組有序記錄,完成排序;

二、圖解

JMTZA`U%RLY3YR3%U~F(WNC[4]

ShellSort

三、代碼實現

/**
 * 希爾排序演示
 * @author Lvan
 */
public class ShellSort {
    public static void main(String[] args) {
        int[] arr = {5, 1, 7, 3, 1, 6, 9, 4};
        shellSort(arr);

        for (int i : arr) {
            System.out.print(i + "\t");
        }
    }

    private static void shellSort(int[] arr) {
        //step:步長
        for (int step = arr.length / 2; step > 0; step /= 2) {
            //對一個步長區間進行比較 [step,arr.length)
            for (int i = step; i < arr.length; i++) {
                int value = arr[i];
                int j;

                //對步長區間中具體的元素進行比較
                for (j = i - step; j >= 0 && arr[j] > value; j -= step) {
                    //j為左區間的取值,j+step為右區間與左區間的對應值。
                    arr[j + step] = arr[j]; 
                }
                //此時step為一個負數,[j + step]為左區間上的初始交換值
                arr[j + step] = value;  
            }
        }
    }
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM