编写代码要求:在main中调用希尔函数 #include <stdio.h> #include <stdlib.h> #include <time.h> #define TRUE 1 #define FALSE 0 #define SIZE 20 //#define SIZE 100000 //以随机数的方式初始化数组 void Initarray_random(int data[],int length) { int i; srand((unsigned)time(NULL)); for(i=1;i<=SIZE; i++) data[i] = rand() % SIZE; } //输出数组中的各个数据的值 void Printarray(int data[],int length) { int i; for(i=1;i<=length; i++) printf("%d ",data[i]); printf("\n"); } //希尔排序 void ShellSort(int r[], int length, int delt[], int n) { int i, j, k, gap, temp; for(k=0; k<n; ++k) { gap = delt[k]; for(i=gap; i<length; ++i) { temp = r[i]; for(j=i-gap; j>=0 && r[j]>temp; j-=gap) { r[j+gap] = r[j]; } r[j+gap] = temp; } } }
时间: 2024-04-29 11:20:00 浏览: 85
好的,这是您的要求,以下是可以调用希尔函数的完整代码:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define TRUE 1
#define FALSE 0
#define SIZE 20
//#define SIZE 100000
//以随机数的方式初始化数组
void Initarray_random(int data[],int length) {
int i;
srand((unsigned)time(NULL));
for(i=1;i<=SIZE; i++)
data[i] = rand() % SIZE;
}
//输出数组中的各个数据的值
void Printarray(int data[],int length) {
int i;
for(i=1;i<=length; i++)
printf("%d ",data[i]);
printf("\n");
}
//希尔排序
void ShellSort(int r[], int length, int delt[], int n) {
int i, j, k, gap, temp;
for(k=0; k<n; ++k) {
gap = delt[k];
for(i=gap; i<length; ++i) {
temp = r[i];
for(j=i-gap; j>=0 && r[j]>temp; j-=gap) {
r[j+gap] = r[j];
}
r[j+gap] = temp;
}
}
}
int main() {
int data[SIZE+1];
int delt[] = {5, 3, 1};
int n = 3; // delt 数组的长度
Initarray_random(data, SIZE);
printf("排序前: ");
Printarray(data, SIZE);
ShellSort(data, SIZE, delt, n);
printf("排序后: ");
Printarray(data, SIZE);
return 0;
}
阅读全文