希爾排序的實質就是分組插入排序,該方法又稱縮小增量排序。
該方法的基本思想是:先將整個待排元素序列分割成若干個子串行(由相隔某個「增量」的元素組成的)分別進行直接插入排序,然後依次縮減增量再進行排序,待整個序列中的元素基本有序(增量足夠小)時,再對全體元素進行一次直接插入排序。因為直接插入排序在元素基本有序的情況下(接近最好情況),效率是很高的,因此希爾排序在時間效率上比前兩種方法有較大提高。
就是直接插入排序的公升級版,可以和直接插入排序進行對比,就比較容易理解。
1.固定增量r,每次除2
/*
* shell排序
* 希爾排序 直接插入排序的公升級版*/
static void shellsort(int a),這個陣列自定義,數量視實際情況而定。
static void shellinsert(int a,int dk)}}
static void shellsort(int a,int dlta,int t)
public static void main(string args);
int dlta= new int;
//shellsort(array);
shellsort(array,dlta,3);
for(int i=0;isystem.out.print(array[i]+" ");
}
希爾(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
希爾排序 shell 1.將n個元素array 分成n 2個數字序列,第乙個資料和第n 2 1 個資料為一對,併排好順序 2.分成n 4個序列,再次排序 3.直到序列為一為止 include include include define size 10 void shellsort int a,in...