希尔排序
2012-08-07 22:03
162 查看
【代码】
【运行截图】
#include <stdio.h> #include <stdlib.h> #include "time.h" #define N 20 void Init(int *arr); void Output(int *arr); int Compare(int x, int y); void ShellSort(int * arr); void ShellInsert(int * arr, int dk); int main() { int arr[N+1]; Init(arr); Output(arr); ShellSort(arr); Output(arr); return 0; } //初始化 void Init(int *arr) { int i; srand( (unsigned)time( NULL ) ); for(i = 1; i <= N; i++) arr[i] = rand()%100; } //输出 void Output(int *arr) { int i; for(i = 1; i <= N; i++) printf("%2d ", arr[i]); printf("\n"); } //比较函数 int Compare(int x, int y) { return x < y; } //希尔排序 void ShellSort(int * arr) { int i, dlta[] = {10, 5, 3, 1}; for(i = 0; i < 4; i++) ShellInsert(arr, dlta[i]); } void ShellInsert(int * arr, int dk) { int i, j; for(i = dk+1; i <= N; i ++) { arr[0] = arr[i]; for(j = i-dk; Compare(arr[0], arr[j]); j -= dk) arr[j+dk] = arr[j]; arr[j+dk] = arr[0]; } }
【运行截图】