希尔排序,也叫作缩小增量排序。其时间运行时间依赖于增量序列。
最有时间复杂度O(n ^ (1.3) ),最差的时间复杂度O(n ^ 2)。
核心代码:
void shellSort(int A[],int N) {
int i, j, Increment;
int tmp;
for (Increment = N / 2; Increment > 0; Increment /= 2) {//确定增量
for (i = Increment; i < N; i++) {//确定起始位置
tmp = A[i];
for (j = i; j >= Increment; j -= Increment) {//交换位置的循环
if (tmp < A[j - Increment]) {
A[j] = A[j - Increment];//第一次循环最多只有两个数交换
}
else break;
}
A[j] = tmp;
for (int k = 0; k < N; k++) {
printf("%d ", A[k]);
}
printf("\n");
// printf("A[j]--%d\n", A[j]);
}
printf("\n");
}
}
int main()
{
int a[6] = { 3,1,5,0,2 ,4};
shellSort(a, 6);
for (int i = 0; i < 5; i++) {
printf("%d ", a[i]);
}
system("pause");
return 0;
}
运行结果
0 1 5 3 2 4
0 1 5 3 2 4
0 1 4 3 2 5
0 1 4 3 2 5
0 1 4 3 2 5
0 1 3 4 2 5
0 1 2 3 4 5
0 1 2 3 4 5
0 1 2 3 4 5