笔者最近在写Shellsort(希尔排序)的时候遇到了一个错误,相信很多c语言新手都会踩坑。
话不多说,上错误代码
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<Windows.h>
#define MAXSIZE 10
void printarr(int arr[]) {
for (int i = 0;i < MAXSIZE;i++) {
printf("%d ", arr[i]);
}
}
void a_Shellsort(int arr[], int dk) {
int j = 0;
for (int i = dk;i < MAXSIZE;i++) {
int temp = arr[i];
if (arr[i] < arr[i - dk]) {
for (j = i - dk;j >= 0 && temp < arr[j];j -= dk) {
arr[j + dk] = arr[j];
}
arr[j + dk] = temp;
}
}
}
//希尔排序
void Shellsort(int arr[], int dt[]) {
int sz = sizeof(dt)/sizeof(dt[0]);
for (int k = 0;k < sz;k++) {
a_Shellsort(arr, dt[k]);
}
}
int main() {
int test[10] = { 9,4,7,1,2,5,6,3,8,10 };
int dt[3] = { 7,3,1 };//2^k-1
//int sz = sizeof(dt) / sizeof(dt[0]);
Shellsort(test, dt);
printarr(test);
system("pause");
return 0;
}
运行结果如下: