希尔排序
时间:O(nlog2n)
空间:O(1)
不稳定
稍复杂
#include <stdio.h> #define swap(x,y) { int tmp; tmp = x; x = y; y = tmp;} void print_array(int *a, int n); void shell_sort(int *a, int n) { int d = n/2; int i, j; while(d > 0) { for(i = d; i < n; i++) { j = i - d; while( j >= 0 && a[j] > a[j + d]) { swap(a[j], a[j + d]); j = j - d; } } d = d / 2; } print_array(a, n); } void print_array(int *a, int n) { int i; for(i = 0; i < n; i++) { printf("%d ", a[i]); } printf("\n"); } int main() { int array[10] = {2, 5, 8, 3, 1, 7, 9, 6, 0, 4}; shell_sort(array, 10); return 0; }