希尔排序回顾

#include <stdio.h>

 

void shell_sort (int *a, int len);

void swap (int *a, int i, int j);

void print (int *a, int len);

int main (void)

{

int a[] = {3, 0, 2, 4, 8, 7, 1, 5};

int len = sizeof (a) / sizeof (a[0]);

print (a, len);

shell_sort (a, len);

print (a, len);

return 0;

}

void shell_sort (int *a, int len)

{

int gap = len / 2;

int i, j, k, temp;

for (; gap > 0; gap /= 2)//排序间隔依次变小,直到变为1

{

for (i=gap; i < 2 * gap; i++)//每组数进行插入排序

{

for (j=i; j<len; j += gap)

{

k = j-gap;

temp = a[j];

while (a[k] > temp && k >= 0)

{

a[k+gap] = a[k];

k -= gap;

}

a[k+gap] = temp;

}

}

}

}

void swap (int *a, int i, int j)

{

int temp = a[i];

a[i] = a[j];

a[j] = temp;

}

void print (int *a, int len)

{

int i;

for (i=0; i<len; i++)

{

printf ("%d ", a[i]);

}

printf ("\n\n");

}

代码只是简单的实现,并没有优化,练练手,不要忘记常用算法罢了。

posted @ 2011-07-27 08:08  jialejiahi  阅读(165)  评论(0编辑  收藏  举报