#include<
stdio.h>
#include <time.h>
#define N 3 //N定义数组的大小
void ShellSort(int a[],int n)
//直接插入排序:对含有n个整数的数组a[]进行从小到大排序
{
int i,j,t;
for(i=1;i<n;i++)
for(j=i-1;j>=0&&a[j]>a[j+1];j--)
{
t=a[j];
a[j]=a[j+1];
a[j+1]=t;
}
}
int main()
{
int i;
int a[N*N]={0},b[N*N]={0};//
二维数组a[n][n]在内存中就是以连续的一片空间存放的
//本质上就是一个n*n大小的一维数组,故此处直接采用一维数组存取
FILE *fp,*fp2;
srand((unsigned int)time(NULL));//初始化
随机数种子
for(i=0;i<N*N;i++)
{
a[i]=rand()%100+1;//随机生成100以内的整数,为了方便采用随机数
//实际上可以采取手工输入
//a[i]=scanf("%d");
printf("%3d",a[i]);//输出该数
if(i>0&&(i+1)%N==0) //按n*n行格式断行
printf("\n");
}
ShellSort(a,N*N); //数据排序
if((fp=fopen("d:\\tmp\\abc.txt","w"))==NULL) //请自行更改文件存放位置及文件名
{
printf("打开文件出错.\n");
return 0;
}
printf("排序结果写入文件\n");
for(i=0;i<N*N;i++)
{
printf("%3d",a[i]);////一起输出排序结果
fprintf(fp, "%3d ",a[i]); //写到文件
if(i>0&&(i+1)%N==0)
{
fprintf(fp,"\n");//换行
printf("\n");
}
}
fclose(fp);
printf("读取文件\n");
if((fp2=fopen("d:\\tmp\\abc.txt","r"))==NULL)
{
printf("打开文件出错.\n");
return 0;
}
for(i=0;i<N*N;i++)
{
fscanf(fp2, "%d",&b[i]);
printf("%3d",b[i]) ;
if(i>0&&(i+1)%N==0)//换行
printf("\n");
}
fclose(fp2);
return 0;
}