#include <stdio.h> //数组的输出 void output_array(int data[], int n) { int i; for(i = 0; i < n; i++) printf("%d ", data[i]); printf("\n"); } //交换两个数 void swap(int *a, int *b) { int x; x = *a; *a = *b; *b = x; } //往数据里面插入数据 void insertion_sort(int data[], int n, int increment) { int i, j; for(i = increment; i < n; i += increment) for(j = i; j >= increment && data[j] > data[j - increment]; j -= increment) swap(&data[j], &data[j - increment]); } //希尔排序 void shellsort(int data[], int n) { int i, j; for(i = n / 2; i > 2; i /= 2) for(j = 0; j < i; j++) { insertion_sort(data + j, n - j, i); } insertion_sort(data, n, 1); } int main() { int data[] = {5, 3, 1, 665, 77, 66, 44, 11, 10, 9, 8, 6}; //打印传进来的数组,调试用,非调试可以注释 output_array(data, sizeof(data)/sizeof(int));//sizeof(data)/sizeof(int) 不把长度写死,应对data传进来的数据是可变的,下同 shellsort(data, sizeof(data)/sizeof(int)); output_array(data, sizeof(data)/sizeof(int)); return 0; }