希尔排序C语言实现(源代码)

希尔排序

对一个元素个数为20个的随机数组进行希尔排序

#include 
#include 
#include 

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;
}

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

你可能感兴趣的:(排序算法,算法,数据结构,排序算法,插入排序)