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

首頁 > 編程 > Java > 正文

java高級排序之希爾排序

2019-11-26 15:13:39
字體:
來源:轉載
供稿:網友

希爾排序對于多達幾千個數據項的,中等大小規模的數組排序表現良好,希爾排序不像快速排序和其它時間復雜度為O(n*logn)的排序算法那么快,因此,對非常大的文件排序,它不是最優選擇,但是希爾排序比選擇排序和插入排序這種時間復雜度為O(n²)的排序要快的多,并且它非常容易實現,代碼簡短

  希爾排序也是插入排序的一種,在插入排序中,如果最小的數在最后面,則復制的次數太多,而希爾解決了這個問題,它也是n-增量排序,它的思想是通過加大插入排序中元素的間隔,并在這些有間隔的元素中進行插入排序,當這些數據項排過一趟序后,希爾排序算法減小數據項的間隔再進行排序,依此進行下去。進行這些排序時數據項之間的間隔被稱為增量,并且習慣上用字母h來表示。

  對于某個馬上要進行希爾排序的數組,開始的間隔應該更大,然后間隔不段減小,直到間隔變為1.

間隔序列:

  間隔序列中的數字素質通常被認為很重要-除了1之外它們沒有公約數,這個約束條件使每趟排序更有可能保持前一趟排序已排好的效果,對于不同的間隔序列,有一個絕對的條件,就是逐漸減小的間隔最后一定要等于1.因此最后一趟是一次普通的插入排序。

  下面列出的例子是h=h*3+1的規律得出的:

package com.jll.sort;public class ShellSort {  int[] arr;  int size;    public ShellSort() {    super();  }    public ShellSort(int size) {    this.size = size;    arr = new int[size];  }  /**   * @param args   */  public static void main(String[] args) {    ShellSort ss = new ShellSort(10);    for(int i=0;i<10;i++){      ss.arr[i] = (int) ((Math.random()*100)+1);      System.out.print(ss.arr[i]+" ");    }    ss.shellSort();    System.out.println();    System.out.println("after sort:");    for(int i=0;i<10;i++){      System.out.print(ss.arr[i]+" ");    }      }    public void shellSort(){    int h = 1;    while(h<=size/3){      h = h*3+1;    }    for(;h>0;h=(h-1)/3){      for(int i=h;i<size;i++){        int temp = arr[i];        int j = i;          while(j>h-1&&arr[j-h]>temp){            arr[j]=arr[j-h];            j-=h;          }          arr[j]=temp;        }      }    }  }
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 丰县| 武夷山市| 沾益县| 金堂县| 彩票| 乃东县| 东平县| 磐安县| 民乐县| 乐亭县| 松溪县| 民县| 洪泽县| 慈利县| 达孜县| 盐源县| 舟山市| 黑水县| 铜山县| 木兰县| 东乡| 蓬溪县| 青神县| 库伦旗| 罗定市| 天津市| 安义县| 阿巴嘎旗| 名山县| 颍上县| 钦州市| 嘉禾县| 阿拉善盟| 太仓市| 筠连县| 盐池县| 武清区| 图们市| 武平县| 巴里| 宜州市|