返回列表 发帖
本帖最后由 Gin_Q 于 2020-2-26 09:56 编辑
//Dev-C++ 5.11
//排序算法用的是选择排序
//by Gin
#include <time.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define LINE_SIZE 100 //行存储大小
FILE *fp(char *,const char *);
int check_width(FILE *fp);
int check_high(FILE *fp);
int main(int argc,char *argv[])
{
clock_t start_t,end_t; //计时
double time_sum; //储存时间
start_t=clock(); //开始计时
FILE *a_txt=fp(argv[1],"r");
FILE *b_txt=fp(argv[2],"w");
int width=0,high=0;
width=check_width(a_txt);
high=check_high(a_txt);
void anay(char *,char *,int linesize,int width); //把二维素组做一维数组传递
void init(char *,int  *,int linesize,int width); //把二维素组做一维数组传递
void sort_min_max(int *p,int high,int width,int n); //小到大
void sort_max_min(int *p,int high,int width,int n); //大到小
void res_print(FILE *fp,int *p,int high,int width,char *p_kemu,char *kemu,char *way,char *form,char *form_1,char *form_2); //打印结果
char mu[LINE_SIZE]="0"; //储存第一行数据
char temp_1[high][width]={"0"};   //存储分割好的数据
char temp[LINE_SIZE]="0"; //存储一行数据
int arr[high][width]={0}; //存储最终数组
int (*p_arr)[width]=arr;
char kemu[5][7]={"0"};
char *p_kemu=kemu[0];
char original[40]="原数据";
char min_m[7]="小到大";
char max_m[7]="大到小";
char form[8]="+-----+";
char form_1[8]="-----+";
char form_2[2]="|";
char spk[2]="\0";
rewind(a_txt);
fgets(mu,LINE_SIZE,a_txt);
anay(mu,(char*)kemu,7,width);
int i;
for (i=0;fgets(temp,LINE_SIZE,a_txt)!=NULL;i++)
{
anay(temp,temp_1[0],width,width);      //将数据分割成二维字符串
init(temp_1[0],arr[i],width,width);   //将二维字符串赋值给二维数组
}
res_print(b_txt,(int *)arr,high,width,p_kemu,spk,original,form,form_1,form_2);
fputc('\n',b_txt);
int mark=0; //0代表升序,1代表降序
for (i=0;i<width;i++)
{
if (mark==0)
{
sort_min_max((int *)arr,high,width,i);
mark=1;
res_print(b_txt,(int *)arr,high,width,p_kemu,kemu[i],min_m,form,form_1,form_2);
}
else if (mark==1)
{
sort_max_min((int *)arr,high,width,i);
mark=0;
res_print(b_txt,(int *)arr,high,width,p_kemu,kemu[i],max_m,form,form_1,form_2);
}
if (i<(high-1)) fputs("\n",b_txt);
}
end_t=clock();
time_sum=(double)(end_t-start_t)/CLOCKS_PER_SEC;
fprintf(b_txt,"程序耗时:%f",time_sum);
fclose(a_txt);
fclose(b_txt);
return 0;
}
FILE *fp(char *p,const char *mode)
{
FILE *pp;
if ((pp= fopen(p,mode))==NULL)
{
printf("open fail! %s",p);
getchar();
exit (0);
}
return pp;
}
//检查数据
int check_width(FILE *fp)
{
rewind(fp);
char delims='0';
int w=1;
for (;(delims=fgetc(fp))!='\n';)
{
if (delims==' ') w++;
}
return w;
}
int check_high(FILE *fp)
{
rewind(fp);
int h=0;
char arr[LINE_SIZE];
for (;fgets(arr,LINE_SIZE,fp)!=NULL;h++);
return h-1; //去掉第一行不算
}
void anay(char *p,char *t,int linesize, int width)
{
int i,j=0,k=0; //j第二维,k第一维
for (i=0;*(p+i)!='\0';i++)
{
if (*(p+i)!=' ' && *(p+i)!='\n')
{
*(t+j*linesize+k)=*(p+i);
k++;
}
else
{
*(t+j*linesize+k)='\0';
j++,k=0;
}
}
}
void init(char *p,int *p1,int linesize,int width)
{
int i;
for (i=0;i<width;i++)
{
*(p1+i)=atoi(p+i*linesize);
}
}
void sort_min_max(int *p,int high,int width,int n)
{
int i,k,l,temp=0;
for (i=0;i<high-1;i++)
{
for (k=i+1;k<high;k++)
{
if (*(p+k*width+n)<*(p+i*width+n))
{
for (l=0;l<width;l++)
{
temp=*(p+k*width+l);
*(p+k*width+l)=*(p+i*width+l);
*(p+i*width+l)=temp;
}
}
}
}
}
void sort_max_min(int *p,int high,int width,int n)
{
int i,k,l,temp=0;
for (i=0;i<high-1;i++)
{
for (k=i+1;k<high;k++)
{
if (*(p+k*width+n)>*(p+i*width+n))
{
for (l=0;l<width;l++)
{
temp=*(p+k*width+l);
*(p+k*width+l)=*(p+i*width+l);
*(p+i*width+l)=temp;
}
}
}
}
}
void res_print(FILE *fp,int *p,int high,int width,char *p_kemu,char *kemu,char *way,char *form,char *form_1,char *form_2)
{
fprintf(fp,"%s%s%s%s%s\n",form,form_1,form_1,form_1,form_1);
fprintf(fp,"%s%6s%-23s%s\n",form_2,way,kemu,form_2);
fprintf(fp,"%s%s%s%s%s\n",form,form_1,form_1,form_1,form_1);
for (int i=0;i<width;i++) fprintf(fp,"%s%-5s",form_2,(p_kemu+i*7));
fprintf(fp,"%s\n%s%s%s%s%s\n",form_2,form,form_1,form_1,form_1,form_1);
int i,j;
for (i=0;i<high;i++)
{
for (j=0;j<width;j++)
{
fprintf(fp,"%s%-5d",form_2,*(p+i*width+j));
}
fprintf(fp,"%s\n",form_2);
fprintf(fp,"%s%s%s%s%s",form,form_1,form_1,form_1,form_1);
fputc('\n',fp);
}
}COPY
结果:
+-----+-----+-----+-----+-----+
|原数据                       |
+-----+-----+-----+-----+-----+
|语文 |数学 |英语 |化学 |生物 |
+-----+-----+-----+-----+-----+
|79   |77   |70   |77   |67   |
+-----+-----+-----+-----+-----+
|64   |70   |74   |75   |72   |
+-----+-----+-----+-----+-----+
|79   |64   |72   |62   |76   |
+-----+-----+-----+-----+-----+
|62   |75   |65   |71   |63   |
+-----+-----+-----+-----+-----+
|79   |76   |62   |62   |77   |
+-----+-----+-----+-----+-----+
|66   |63   |77   |75   |79   |
+-----+-----+-----+-----+-----+
|74   |75   |72   |61   |61   |
+-----+-----+-----+-----+-----+
|71   |63   |79   |60   |70   |
+-----+-----+-----+-----+-----+
|74   |64   |74   |78   |69   |
+-----+-----+-----+-----+-----+
+-----+-----+-----+-----+-----+
|小到大语文                   |
+-----+-----+-----+-----+-----+
|语文 |数学 |英语 |化学 |生物 |
+-----+-----+-----+-----+-----+
|62   |75   |65   |71   |63   |
+-----+-----+-----+-----+-----+
|64   |70   |74   |75   |72   |
+-----+-----+-----+-----+-----+
|66   |63   |77   |75   |79   |
+-----+-----+-----+-----+-----+
|71   |63   |79   |60   |70   |
+-----+-----+-----+-----+-----+
|74   |75   |72   |61   |61   |
+-----+-----+-----+-----+-----+
|74   |64   |74   |78   |69   |
+-----+-----+-----+-----+-----+
|79   |77   |70   |77   |67   |
+-----+-----+-----+-----+-----+
|79   |76   |62   |62   |77   |
+-----+-----+-----+-----+-----+
|79   |64   |72   |62   |76   |
+-----+-----+-----+-----+-----+
+-----+-----+-----+-----+-----+
|大到小数学                   |
+-----+-----+-----+-----+-----+
|语文 |数学 |英语 |化学 |生物 |
+-----+-----+-----+-----+-----+
|79   |77   |70   |77   |67   |
+-----+-----+-----+-----+-----+
|79   |76   |62   |62   |77   |
+-----+-----+-----+-----+-----+
|62   |75   |65   |71   |63   |
+-----+-----+-----+-----+-----+
|74   |75   |72   |61   |61   |
+-----+-----+-----+-----+-----+
|64   |70   |74   |75   |72   |
+-----+-----+-----+-----+-----+
|74   |64   |74   |78   |69   |
+-----+-----+-----+-----+-----+
|79   |64   |72   |62   |76   |
+-----+-----+-----+-----+-----+
|71   |63   |79   |60   |70   |
+-----+-----+-----+-----+-----+
|66   |63   |77   |75   |79   |
+-----+-----+-----+-----+-----+
+-----+-----+-----+-----+-----+
|小到大英语                   |
+-----+-----+-----+-----+-----+
|语文 |数学 |英语 |化学 |生物 |
+-----+-----+-----+-----+-----+
|79   |76   |62   |62   |77   |
+-----+-----+-----+-----+-----+
|62   |75   |65   |71   |63   |
+-----+-----+-----+-----+-----+
|79   |77   |70   |77   |67   |
+-----+-----+-----+-----+-----+
|74   |75   |72   |61   |61   |
+-----+-----+-----+-----+-----+
|79   |64   |72   |62   |76   |
+-----+-----+-----+-----+-----+
|74   |64   |74   |78   |69   |
+-----+-----+-----+-----+-----+
|64   |70   |74   |75   |72   |
+-----+-----+-----+-----+-----+
|66   |63   |77   |75   |79   |
+-----+-----+-----+-----+-----+
|71   |63   |79   |60   |70   |
+-----+-----+-----+-----+-----+
+-----+-----+-----+-----+-----+
|大到小化学                   |
+-----+-----+-----+-----+-----+
|语文 |数学 |英语 |化学 |生物 |
+-----+-----+-----+-----+-----+
|74   |64   |74   |78   |69   |
+-----+-----+-----+-----+-----+
|79   |77   |70   |77   |67   |
+-----+-----+-----+-----+-----+
|64   |70   |74   |75   |72   |
+-----+-----+-----+-----+-----+
|66   |63   |77   |75   |79   |
+-----+-----+-----+-----+-----+
|62   |75   |65   |71   |63   |
+-----+-----+-----+-----+-----+
|79   |64   |72   |62   |76   |
+-----+-----+-----+-----+-----+
|79   |76   |62   |62   |77   |
+-----+-----+-----+-----+-----+
|74   |75   |72   |61   |61   |
+-----+-----+-----+-----+-----+
|71   |63   |79   |60   |70   |
+-----+-----+-----+-----+-----+
+-----+-----+-----+-----+-----+
|小到大生物                   |
+-----+-----+-----+-----+-----+
|语文 |数学 |英语 |化学 |生物 |
+-----+-----+-----+-----+-----+
|74   |75   |72   |61   |61   |
+-----+-----+-----+-----+-----+
|62   |75   |65   |71   |63   |
+-----+-----+-----+-----+-----+
|79   |77   |70   |77   |67   |
+-----+-----+-----+-----+-----+
|74   |64   |74   |78   |69   |
+-----+-----+-----+-----+-----+
|71   |63   |79   |60   |70   |
+-----+-----+-----+-----+-----+
|64   |70   |74   |75   |72   |
+-----+-----+-----+-----+-----+
|79   |64   |72   |62   |76   |
+-----+-----+-----+-----+-----+
|79   |76   |62   |62   |77   |
+-----+-----+-----+-----+-----+
|66   |63   |77   |75   |79   |
+-----+-----+-----+-----+-----+
程序耗时:0.000000COPY

TOP

本帖最后由 Gin_Q 于 2020-2-25 10:49 编辑

1W行1秒内没有问题的!(CPU型号 :Intel(R) Celeron(R) CPU G1840 @ 2.80GHz)
+-----+-----+-----+-----+-----+
|66   |63   |77   |75   |79   |
+-----+-----+-----+-----+-----+
|66   |63   |77   |75   |79   |
+-----+-----+-----+-----+-----+
|66   |63   |77   |75   |79   |
+-----+-----+-----+-----+-----+
|66   |63   |77   |75   |79   |
+-----+-----+-----+-----+-----+
|66   |63   |77   |75   |79   |
+-----+-----+-----+-----+-----+
|66   |63   |77   |75   |79   |
+-----+-----+-----+-----+-----+
程序耗时:0.916000COPY

TOP

本帖最后由 Gin_Q 于 2020-2-28 19:40 编辑

学到结构体!想到用于这个题目相当合适!!!
#include <stdio.h>
struct Student
{
int nu_1;
int nu_2;
int nu_3;
int nu_4;
int nu_5;
};
int main(void)
{
struct Student arr[9]={{79,77,70,77,67},{64,70,74,75,72},{79,64,72,62,76},{62,75,65,71,63},
{79,76,62,62,77},{66,63,77,75,79},{74,75,72,61,61},{71,63,79,60,70},{74,64,74,78,69}};
struct Student temp;
const int n=9;
int i,j;
for (i=0;i<n-1;i++)
{
for (j=i+1;j<n;j++)
{
if (arr[i].nu_1>arr[j].nu_1)
{
temp=arr[i];arr[i]=arr[j];arr[j]=temp;
}
}
}
printf("语文 数学 英语 化学 生物\n");
for (i=0;i<n;i++) printf("%-5d%-5d%-5d%-5d%-5d\n",arr[i].nu_1,arr[i].nu_2,arr[i].nu_3,arr[i].nu_4,arr[i].nu_5);
return 0;
}COPY
语文 数学 英语 化学 生物
62   75   65   71   63
64   70   74   75   72
66   63   77   75   79
71   63   79   60   70
74   75   72   61   61
74   64   74   78   69
79   77   70   77   67
79   76   62   62   77
79   64   72   62   76
--------------------------------
Process exited after 0.01317 seconds with return value 0
请按任意键继续. . .COPY

TOP

返回列表