批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程
[批处理文件精品]批处理版照片整理器[批处理文件精品]纯批处理备份&还原驱动在线第三方下载
返回列表 发帖
本帖最后由 Gin_Q 于 2020-2-26 09:56 编辑
  1. //Dev-C++ 5.11
  2. //排序算法用的是选择排序
  3. //by Gin
  4. #include <time.h>
  5. #include <stdio.h>
  6. #include <string.h>
  7. #include <stdlib.h>
  8. #define LINE_SIZE 100 //行存储大小
  9. FILE *fp(char *,const char *);
  10. int check_width(FILE *fp);
  11. int check_high(FILE *fp);
  12. int main(int argc,char *argv[])
  13. {
  14. clock_t start_t,end_t; //计时
  15. double time_sum; //储存时间
  16. start_t=clock(); //开始计时
  17. FILE *a_txt=fp(argv[1],"r");
  18. FILE *b_txt=fp(argv[2],"w");
  19. int width=0,high=0;
  20. width=check_width(a_txt);
  21. high=check_high(a_txt);
  22. void anay(char *,char *,int linesize,int width); //把二维素组做一维数组传递
  23. void init(char *,int  *,int linesize,int width); //把二维素组做一维数组传递
  24. void sort_min_max(int *p,int high,int width,int n); //小到大
  25. void sort_max_min(int *p,int high,int width,int n); //大到小
  26. 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); //打印结果
  27. char mu[LINE_SIZE]="0"; //储存第一行数据
  28. char temp_1[high][width]={"0"};   //存储分割好的数据
  29. char temp[LINE_SIZE]="0"; //存储一行数据
  30. int arr[high][width]={0}; //存储最终数组
  31. int (*p_arr)[width]=arr;
  32. char kemu[5][7]={"0"};
  33. char *p_kemu=kemu[0];
  34. char original[40]="原数据";
  35. char min_m[7]="小到大";
  36. char max_m[7]="大到小";
  37. char form[8]="+-----+";
  38. char form_1[8]="-----+";
  39. char form_2[2]="|";
  40. char spk[2]="\0";
  41. rewind(a_txt);
  42. fgets(mu,LINE_SIZE,a_txt);
  43. anay(mu,(char*)kemu,7,width);
  44. int i;
  45. for (i=0;fgets(temp,LINE_SIZE,a_txt)!=NULL;i++)
  46. {
  47. anay(temp,temp_1[0],width,width);      //将数据分割成二维字符串
  48. init(temp_1[0],arr[i],width,width);   //将二维字符串赋值给二维数组
  49. }
  50. res_print(b_txt,(int *)arr,high,width,p_kemu,spk,original,form,form_1,form_2);
  51. fputc('\n',b_txt);
  52. int mark=0; //0代表升序,1代表降序
  53. for (i=0;i<width;i++)
  54. {
  55. if (mark==0)
  56. {
  57. sort_min_max((int *)arr,high,width,i);
  58. mark=1;
  59. res_print(b_txt,(int *)arr,high,width,p_kemu,kemu[i],min_m,form,form_1,form_2);
  60. }
  61. else if (mark==1)
  62. {
  63. sort_max_min((int *)arr,high,width,i);
  64. mark=0;
  65. res_print(b_txt,(int *)arr,high,width,p_kemu,kemu[i],max_m,form,form_1,form_2);
  66. }
  67. if (i<(high-1)) fputs("\n",b_txt);
  68. }
  69. end_t=clock();
  70. time_sum=(double)(end_t-start_t)/CLOCKS_PER_SEC;
  71. fprintf(b_txt,"程序耗时:%f",time_sum);
  72. fclose(a_txt);
  73. fclose(b_txt);
  74. return 0;
  75. }
  76. FILE *fp(char *p,const char *mode)
  77. {
  78. FILE *pp;
  79. if ((pp= fopen(p,mode))==NULL)
  80. {
  81. printf("open fail! %s",p);
  82. getchar();
  83. exit (0);
  84. }
  85. return pp;
  86. }
  87. //检查数据
  88. int check_width(FILE *fp)
  89. {
  90. rewind(fp);
  91. char delims='0';
  92. int w=1;
  93. for (;(delims=fgetc(fp))!='\n';)
  94. {
  95. if (delims==' ') w++;
  96. }
  97. return w;
  98. }
  99. int check_high(FILE *fp)
  100. {
  101. rewind(fp);
  102. int h=0;
  103. char arr[LINE_SIZE];
  104. for (;fgets(arr,LINE_SIZE,fp)!=NULL;h++);
  105. return h-1; //去掉第一行不算
  106. }
  107. void anay(char *p,char *t,int linesize, int width)
  108. {
  109. int i,j=0,k=0; //j第二维,k第一维
  110. for (i=0;*(p+i)!='\0';i++)
  111. {
  112. if (*(p+i)!=' ' && *(p+i)!='\n')
  113. {
  114. *(t+j*linesize+k)=*(p+i);
  115. k++;
  116. }
  117. else
  118. {
  119. *(t+j*linesize+k)='\0';
  120. j++,k=0;
  121. }
  122. }
  123. }
  124. void init(char *p,int *p1,int linesize,int width)
  125. {
  126. int i;
  127. for (i=0;i<width;i++)
  128. {
  129. *(p1+i)=atoi(p+i*linesize);
  130. }
  131. }
  132. void sort_min_max(int *p,int high,int width,int n)
  133. {
  134. int i,k,l,temp=0;
  135. for (i=0;i<high-1;i++)
  136. {
  137. for (k=i+1;k<high;k++)
  138. {
  139. if (*(p+k*width+n)<*(p+i*width+n))
  140. {
  141. for (l=0;l<width;l++)
  142. {
  143. temp=*(p+k*width+l);
  144. *(p+k*width+l)=*(p+i*width+l);
  145. *(p+i*width+l)=temp;
  146. }
  147. }
  148. }
  149. }
  150. }
  151. void sort_max_min(int *p,int high,int width,int n)
  152. {
  153. int i,k,l,temp=0;
  154. for (i=0;i<high-1;i++)
  155. {
  156. for (k=i+1;k<high;k++)
  157. {
  158. if (*(p+k*width+n)>*(p+i*width+n))
  159. {
  160. for (l=0;l<width;l++)
  161. {
  162. temp=*(p+k*width+l);
  163. *(p+k*width+l)=*(p+i*width+l);
  164. *(p+i*width+l)=temp;
  165. }
  166. }
  167. }
  168. }
  169. }
  170. 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)
  171. {
  172. fprintf(fp,"%s%s%s%s%s\n",form,form_1,form_1,form_1,form_1);
  173. fprintf(fp,"%s%6s%-23s%s\n",form_2,way,kemu,form_2);
  174. fprintf(fp,"%s%s%s%s%s\n",form,form_1,form_1,form_1,form_1);
  175. for (int i=0;i<width;i++) fprintf(fp,"%s%-5s",form_2,(p_kemu+i*7));
  176. fprintf(fp,"%s\n%s%s%s%s%s\n",form_2,form,form_1,form_1,form_1,form_1);
  177. int i,j;
  178. for (i=0;i<high;i++)
  179. {
  180. for (j=0;j<width;j++)
  181. {
  182. fprintf(fp,"%s%-5d",form_2,*(p+i*width+j));
  183. }
  184. fprintf(fp,"%s\n",form_2);
  185. fprintf(fp,"%s%s%s%s%s",form,form_1,form_1,form_1,form_1);
  186. fputc('\n',fp);
  187. }
  188. }
复制代码
结果:
  1. +-----+-----+-----+-----+-----+
  2. |原数据                       |
  3. +-----+-----+-----+-----+-----+
  4. |语文 |数学 |英语 |化学 |生物 |
  5. +-----+-----+-----+-----+-----+
  6. |79   |77   |70   |77   |67   |
  7. +-----+-----+-----+-----+-----+
  8. |64   |70   |74   |75   |72   |
  9. +-----+-----+-----+-----+-----+
  10. |79   |64   |72   |62   |76   |
  11. +-----+-----+-----+-----+-----+
  12. |62   |75   |65   |71   |63   |
  13. +-----+-----+-----+-----+-----+
  14. |79   |76   |62   |62   |77   |
  15. +-----+-----+-----+-----+-----+
  16. |66   |63   |77   |75   |79   |
  17. +-----+-----+-----+-----+-----+
  18. |74   |75   |72   |61   |61   |
  19. +-----+-----+-----+-----+-----+
  20. |71   |63   |79   |60   |70   |
  21. +-----+-----+-----+-----+-----+
  22. |74   |64   |74   |78   |69   |
  23. +-----+-----+-----+-----+-----+
  24. +-----+-----+-----+-----+-----+
  25. |小到大语文                   |
  26. +-----+-----+-----+-----+-----+
  27. |语文 |数学 |英语 |化学 |生物 |
  28. +-----+-----+-----+-----+-----+
  29. |62   |75   |65   |71   |63   |
  30. +-----+-----+-----+-----+-----+
  31. |64   |70   |74   |75   |72   |
  32. +-----+-----+-----+-----+-----+
  33. |66   |63   |77   |75   |79   |
  34. +-----+-----+-----+-----+-----+
  35. |71   |63   |79   |60   |70   |
  36. +-----+-----+-----+-----+-----+
  37. |74   |75   |72   |61   |61   |
  38. +-----+-----+-----+-----+-----+
  39. |74   |64   |74   |78   |69   |
  40. +-----+-----+-----+-----+-----+
  41. |79   |77   |70   |77   |67   |
  42. +-----+-----+-----+-----+-----+
  43. |79   |76   |62   |62   |77   |
  44. +-----+-----+-----+-----+-----+
  45. |79   |64   |72   |62   |76   |
  46. +-----+-----+-----+-----+-----+
  47. +-----+-----+-----+-----+-----+
  48. |大到小数学                   |
  49. +-----+-----+-----+-----+-----+
  50. |语文 |数学 |英语 |化学 |生物 |
  51. +-----+-----+-----+-----+-----+
  52. |79   |77   |70   |77   |67   |
  53. +-----+-----+-----+-----+-----+
  54. |79   |76   |62   |62   |77   |
  55. +-----+-----+-----+-----+-----+
  56. |62   |75   |65   |71   |63   |
  57. +-----+-----+-----+-----+-----+
  58. |74   |75   |72   |61   |61   |
  59. +-----+-----+-----+-----+-----+
  60. |64   |70   |74   |75   |72   |
  61. +-----+-----+-----+-----+-----+
  62. |74   |64   |74   |78   |69   |
  63. +-----+-----+-----+-----+-----+
  64. |79   |64   |72   |62   |76   |
  65. +-----+-----+-----+-----+-----+
  66. |71   |63   |79   |60   |70   |
  67. +-----+-----+-----+-----+-----+
  68. |66   |63   |77   |75   |79   |
  69. +-----+-----+-----+-----+-----+
  70. +-----+-----+-----+-----+-----+
  71. |小到大英语                   |
  72. +-----+-----+-----+-----+-----+
  73. |语文 |数学 |英语 |化学 |生物 |
  74. +-----+-----+-----+-----+-----+
  75. |79   |76   |62   |62   |77   |
  76. +-----+-----+-----+-----+-----+
  77. |62   |75   |65   |71   |63   |
  78. +-----+-----+-----+-----+-----+
  79. |79   |77   |70   |77   |67   |
  80. +-----+-----+-----+-----+-----+
  81. |74   |75   |72   |61   |61   |
  82. +-----+-----+-----+-----+-----+
  83. |79   |64   |72   |62   |76   |
  84. +-----+-----+-----+-----+-----+
  85. |74   |64   |74   |78   |69   |
  86. +-----+-----+-----+-----+-----+
  87. |64   |70   |74   |75   |72   |
  88. +-----+-----+-----+-----+-----+
  89. |66   |63   |77   |75   |79   |
  90. +-----+-----+-----+-----+-----+
  91. |71   |63   |79   |60   |70   |
  92. +-----+-----+-----+-----+-----+
  93. +-----+-----+-----+-----+-----+
  94. |大到小化学                   |
  95. +-----+-----+-----+-----+-----+
  96. |语文 |数学 |英语 |化学 |生物 |
  97. +-----+-----+-----+-----+-----+
  98. |74   |64   |74   |78   |69   |
  99. +-----+-----+-----+-----+-----+
  100. |79   |77   |70   |77   |67   |
  101. +-----+-----+-----+-----+-----+
  102. |64   |70   |74   |75   |72   |
  103. +-----+-----+-----+-----+-----+
  104. |66   |63   |77   |75   |79   |
  105. +-----+-----+-----+-----+-----+
  106. |62   |75   |65   |71   |63   |
  107. +-----+-----+-----+-----+-----+
  108. |79   |64   |72   |62   |76   |
  109. +-----+-----+-----+-----+-----+
  110. |79   |76   |62   |62   |77   |
  111. +-----+-----+-----+-----+-----+
  112. |74   |75   |72   |61   |61   |
  113. +-----+-----+-----+-----+-----+
  114. |71   |63   |79   |60   |70   |
  115. +-----+-----+-----+-----+-----+
  116. +-----+-----+-----+-----+-----+
  117. |小到大生物                   |
  118. +-----+-----+-----+-----+-----+
  119. |语文 |数学 |英语 |化学 |生物 |
  120. +-----+-----+-----+-----+-----+
  121. |74   |75   |72   |61   |61   |
  122. +-----+-----+-----+-----+-----+
  123. |62   |75   |65   |71   |63   |
  124. +-----+-----+-----+-----+-----+
  125. |79   |77   |70   |77   |67   |
  126. +-----+-----+-----+-----+-----+
  127. |74   |64   |74   |78   |69   |
  128. +-----+-----+-----+-----+-----+
  129. |71   |63   |79   |60   |70   |
  130. +-----+-----+-----+-----+-----+
  131. |64   |70   |74   |75   |72   |
  132. +-----+-----+-----+-----+-----+
  133. |79   |64   |72   |62   |76   |
  134. +-----+-----+-----+-----+-----+
  135. |79   |76   |62   |62   |77   |
  136. +-----+-----+-----+-----+-----+
  137. |66   |63   |77   |75   |79   |
  138. +-----+-----+-----+-----+-----+
  139. 程序耗时:0.000000
复制代码

TOP

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

1W行1秒内没有问题的!(CPU型号 :Intel(R) Celeron(R) CPU G1840 @ 2.80GHz)
  1. +-----+-----+-----+-----+-----+
  2. |66   |63   |77   |75   |79   |
  3. +-----+-----+-----+-----+-----+
  4. |66   |63   |77   |75   |79   |
  5. +-----+-----+-----+-----+-----+
  6. |66   |63   |77   |75   |79   |
  7. +-----+-----+-----+-----+-----+
  8. |66   |63   |77   |75   |79   |
  9. +-----+-----+-----+-----+-----+
  10. |66   |63   |77   |75   |79   |
  11. +-----+-----+-----+-----+-----+
  12. |66   |63   |77   |75   |79   |
  13. +-----+-----+-----+-----+-----+
  14. 程序耗时:0.916000
复制代码

TOP

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

学到结构体!想到用于这个题目相当合适!!!
  1. #include <stdio.h>
  2. struct Student
  3. {
  4. int nu_1;
  5. int nu_2;
  6. int nu_3;
  7. int nu_4;
  8. int nu_5;
  9. };
  10. int main(void)
  11. {
  12. struct Student arr[9]={{79,77,70,77,67},{64,70,74,75,72},{79,64,72,62,76},{62,75,65,71,63},
  13. {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}};
  14. struct Student temp;
  15. const int n=9;
  16. int i,j;
  17. for (i=0;i<n-1;i++)
  18. {
  19. for (j=i+1;j<n;j++)
  20. {
  21. if (arr[i].nu_1>arr[j].nu_1)
  22. {
  23. temp=arr[i];arr[i]=arr[j];arr[j]=temp;
  24. }
  25. }
  26. }
  27. printf("语文 数学 英语 化学 生物\n");
  28. 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);
  29. return 0;
  30. }
复制代码
  1. 语文 数学 英语 化学 生物
  2. 62   75   65   71   63
  3. 64   70   74   75   72
  4. 66   63   77   75   79
  5. 71   63   79   60   70
  6. 74   75   72   61   61
  7. 74   64   74   78   69
  8. 79   77   70   77   67
  9. 79   76   62   62   77
  10. 79   64   72   62   76
  11. --------------------------------
  12. Process exited after 0.01317 seconds with return value 0
  13. 请按任意键继续. . .
复制代码

TOP

返回列表