希尔排序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;
}

如有不足,欢迎各位大佬指正

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