#include <stdio.h> void ShellSort( int *a, int n ) { int i, j; int temp; int increment; increment = n; do { increment = increment/3+1; for( i=increment; i<n; i+=increment ) { //取出第i个记录的关键字 temp = a[i]; for( j=i-increment; j>=0; j-=increment ) { if( temp < a[j] ) { if( 0 == j ) { //取出的关键字比当前有序区的第一个关键字还要小的情况,做特殊处理(也可以利用哨兵来处理) a[j+increment] = a[j]; a[j] = temp; } else a[j+increment] = a[j]; } else { a[j+increment] = temp; break; } } } }while( increment > 1 ); } int main() { int i; int a[10] = {7,4,1,8,5,2,9,6,3,0}; ShellSort( a, 10 ); for( i=0; i<10; i++ ) printf("%d ", a[i]); printf("\n"); return 0; }