//希爾排序Shell Sort //楊鑫 #include#include void ShellSort(int a[], int length) { int increment; int i,j; int temp; for(increment = length/2; increment > 0; increment /= 2) //用來控制步長,最後遞減到1 { // i從第step開始排列,應為插入排序的第一個元素 // 可以先不動,從第二個開始排序 for(i = increment; i < length; i++) { temp = a[i]; for(j = i - increment; j >= 0 && temp < a[j]; j -= increment) { a[j + increment] = a[j]; } a[j + increment] = temp; //將第一個位置填上 } } } int main() { printf(==============希爾排序=============== ); int i, j; int a[] = {5, 18, 151, 138, 160, 63, 174, 169, 79, 200}; printf(待排序的序列是: ); for(i = 0; i < 10; i++) { printf(%d , a[i]); } ShellSort(a, 10); printf( 排序後的序列是: ); for(j = 0; j < 10; j++) { printf(%d , a[j]); } printf( ); return 0; }