希爾(shell)排序原理分析及Java實現

2021-07-11 03:15:41 字數 948 閱讀 6047

shell排序

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

public

class demo

system.out.print("\n");}}

public

static

void

main(string args)

system.out.print("排序前的陣列為:\n"); //輸出排序前的陣列

for(i=0;iout.print(shuzu[i]+" ");

}system.out.print("\n");

shellsort(shuzu); //排序操作

system.out.print("排序後的陣列為:\n");

for(i=0;iout.print(shuzu[i]+" "); //輸出排序後的陣列

}system.out.print("\n");

}}

shell排序的時間效能優於直接插入排序

①當檔案初態基本有序時直接插入排序所需的比較和移動次數均較少。

②當n值較小時,n和n^2的差別也較小,即直接插入排序的最好時間複雜度o(n)和最壞時間複雜度0(n^2)差別不大。

③在希爾排序開始時增量較大,分組較多,每組的記錄數目少,故各組內直接插入較快,後來增量di逐漸縮小,分組數逐漸減少,而各組的記錄數目逐漸增多,但由於已經按di-1作為距離排過序,使檔案較接近於有序狀態,所以新的一趟排序過程也較快。因此,希爾排序在效率上較直接插人排序有較大的改進。

穩定性

希爾排序是不穩定的。

希爾(Shell)排序

希爾 shell 排序 2 平方級時間複雜度,但當然也沒有線性排序演算法的o n 級的線性時間複雜度,對於大型資料輸入,線性演算法肯定是最佳的選擇,但對於中規模資料而言,希爾排序無疑是最佳的選擇。演算法大師knuth在他的著作 計算機程式設計藝術 給出的希爾排序的平均時間複雜度為o n 1.3 介於...

希爾shell排序

include include include typedef int type define n 100000 void exchange type a,int a,int b void selectionsort type a,int n void insertionsort type a,in...

希爾排序 Shell

希爾排序的實質就是分組插入排序,該方法又稱縮小增量排序。該方法的基本思想是 先將整個待排元素序列分割成若干個子串行 由相隔某個 增量 的元素組成的 分別進行直接插入排序,然後依次縮減增量再進行排序,待整個序列中的元素基本有序 增量足夠小 時,再對全體元素進行一次直接插入排序。因為直接插入排序在元素基...