希尔排序算法

内部排序

直接插入排序算法

折半插入排序

外部排序

c 复制代码
// 希尔排序
void ShellSort(int A[], int n) {
	// 记录步长
	for (int dk = n / 2; dk >= 1; dk = dk / 2) {
		for (int i = dk + 1; i <= n; i++) {
			if (A[i] < A[i - dk]) {
				A[0] = A[i];
				int j;
				for (j = i - dk; A[0] < A[j] && j>0; j -= dk) {
					A[j + dk] = A[j];
				}
				A[j + dk] = A[0];
			}
		}
	}
}

int main(int argc, char* argv[] ) {

	int a[] = { 0,5,4,8,1,2,6,7 ,3};

	int len = sizeof(a) / sizeof(a[0]);
	ShellSort(a, len-1);
	for (int i = 0; i < len; i++) {
		printf("%d\n", a[i]);
	}
	return 0;
}

执行效果