希尔排序

时间: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;
}

 

posted @ 2012-12-19 17:05  Arya_yu  阅读(96)  评论(0编辑  收藏  举报