希尔排序C语言实现(源代码)
希尔排序
对一个元素个数为20个的随机数组进行希尔排序
#include <stdio.h> #include <stdlib.h> #include <time.h> void swap(int &a, int &b){ int tmp = a; a = b; b = tmp; } void Display(int *a, int n){ for (register int i = 0; i < n; i++){ printf("%d ", a[i]); } printf(" "); } void shellsort(int *a, int n){ register int i, j, k; int cur, gap; for (gap = n / 2; gap > 0; gap /= 2){ //步长的选取 printf("希尔排序的步长为:%d ", gap); for (i = 0; i < gap; i++){ //接下来就是插入排序 for (j = i + gap; j < n; j += gap){ //每次加上步长 if (a[j] < a[j - gap]){ cur = a[j]; k = j - gap; while (k >= 0 && a[k] > cur){ //记录后移,查找插入位置 a[k + gap] = a[k]; k -= gap; } a[k + gap] = cur;//找到位置插入 } } printf("第%d次插入排序: ", i + 1); Display(a, n); } //Display(a, n); } } int main() { int a[20]; //生成一个有20个元素的随机数组 srand((unsigned int)time(0));//修改种子 for (register int i = 0; i < 20; i++){ a[i] = rand(); } printf("排序之前数组: "); Display(a, 15); printf(" "); //希尔排序 shellsort(a, 15); printf(" 希尔排序后数组: "); Display(a, 15); return 0; }
如有不足,欢迎各位大佬指正
下一篇:
链式地址&线性探测的平均查找长度