shell主程序
#include <stdio.h>
#include "shell.h"
#define SIZE 20
int main(int argc, char *argv[])
{
data_t data[SIZE]={0};
shellsort(data,SIZE);//初始赋值
shellprintf(data,SIZE);//打印
shell(data,SIZE);
shellprintf(data,SIZE);//打印
return 0;
}
shell.c程序
#include "shell.h"
void shellsort(data_t *data,int sizeof_t)//初始赋值
{
if(data==NULL||sizeof_t<1)
return ;
srand(time(NULL));
int i=0;
for(;i<sizeof_t;i++)
data[i]=rand()%1000;
}
void shellprintf(data_t *data,int sizeof_t)//打印
{
if(data==NULL||sizeof_t<1)
return ;
int i=0,j=0;
for(;i<sizeof_t;i++)
{
printf("%5d",data[i]);
j++;
if(j%10==0)
printf("\n");
}
printf("\n");
}
void shell(data_t *data,int sizeof_t)
{
if(data==NULL||sizeof_t<1)
return ;
int i,j;
data_t longdata=sizeof_t;
do
{
longdata=longdata/3+1;
for(i=longdata+1;i<=sizeof_t;i++)
{
if(data[i-1]<data[i-longdata-1])
{
data_t max=data[i-1];
for(j=i-longdata;j>0&&max<data[j-1];j=j-longdata)
data[j+longdata-1]=data[j-1];
data[j+longdata-1]=max;
}
}
}while(longdata>1);
}
shell.h程序
#ifndef _SHELL_H_
#define _SHELL_H_
#include <stdlib.h>
#include <time.h>
#include <stdio.h>
typedef int data_t;
void shellsort(data_t *data,int sizeof_t);//初始赋值
void shellprintf(data_t *data,int sizeof_t);//打印
void shell(data_t *data,int sizeof_t);
#endif
效果图: