内部排序
外部排序
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;
}
执行效果
