希尔排序的简单实例

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

#define MAXlen 100

/*
算法思想简单描述:先将要排序的一组数按某个增量 d分成若干组,每组中记录的下
标相差 d。对每组中全部元素进行排序,然后再用一个较小的增量对它进行,在每组
中再进行排序。当增量减到 1时,整个要排序的数被分成一组,排序完成。下面的函
数是一个希尔排序算法的一个实现,初次取序列的一半为增量,以后每次减半,直到
增量为 1,希尔排序是不稳定的。
*/

void shell_sort(int *x, int n) {   // 希尔排序
	int h, j, k, t;
	for (h = n / 2; h > 0; h = h / 2) { /*控制增量*/
		for (j = h; j < n; j++) { 
			t = *(x + j);
			for (k = j - h; (k >= 0 && t < *(x + k)); k -= h) {
				*(x + k + h) = *(x + k);
			}
			*(x + k + h) = t;
		}
	}
}

int main() {
	int i;
	int iArr[MAXlen];
	srand((unsigned int)time(NULL));
	printf("
排序前:
");
	for(i = 0 ; i < MAXlen ; i++) {
		iArr[i] = (unsigned int)rand() % 1000;
		if(i % 10 == 0) printf("%
");
		printf("%5d",iArr[i]);
	}
	printf("
");
	shell_sort(iArr,MAXlen);
	printf("
排序后:
");
	for(i = 0 ; i < MAXlen ; i++) {
		if(i % 10 == 0) printf("%
");
		printf("%5d",iArr[i]);
	}
	printf("

");
	return 0;
}

  

原文地址:https://www.cnblogs.com/ledao/p/3366349.html