希尔排序
对一个元素个数为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("\n");
}
void shellsort(int *a, int n){
register int i, j, k;
int cur, gap;
for (gap = n / 2; gap > 0; gap /= 2){//步长的选取
printf("希尔排序的步长为:%d\n", 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("\n");
//希尔排序
shellsort(a, 15);
printf("\n希尔排序后数组: ");
Display(a, 15);
return 0;
}
如有不足,欢迎各位大佬指正