希尔排序算法的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);
}