希尔排序算法的C语言实现

希尔排序的介绍这里就不赘述了,网上有很多。直接上代码,代码在CODEBLOCKS测试通过。

void array_print(int *array,int num) { int i;

for(i = 0;i < num; i++) printf("%d ",array[i]);

printf(" ");

return; }

void sort_insert(int *array,int num) { int sorted_num = 1; int i,j,k; int insert_num;

for(i = 1;i < num;i++) { //printf("begin insert %d into list ",array[i]); insert_num = array[i];

/* insert i into sorted array[0,sorted_index] */ for(j = 0;j < sorted_num;j++) { if(array[i] < array[j]) { for(k = sorted_num - 1;k >= j;k--) array[k+1] = array[k];

array[j] = insert_num;

break; } }

sorted_num++;

//array_print(array,sorted_num); }

return; }

/* group all items away from gap into new array sort with sort_inserted put items from new array back to array */ void sort_shell_group(int *list,int num,int gap) { int *new_list = malloc(4*num); int i,j,k;

printf("gap=%d ",gap);

for(i = 0;i < gap; i++) { for(j=i,k=0;j < num ;j += gap) new_list[k++] = list[j];

sort_insert(new_list,k);

for(j=i,k=0;j < num ;j += gap) list[j] = new_list[k++]; }

array_print(list,10);

return; }

void sort_shell(int *list,int num) { int gap;

for(gap = num/2;gap > 1;gap /= 2) sort_shell_group(list,num,gap);

sort_insert(list,num);

return; }

void sort_test(void) { int list[10] = {48,37,64,96,75,12,26,45,54,3};

array_print(list,10);

sort_shell(list,10);

array_print(list,10);

}

经验分享 程序员 微信小程序 职场和发展