user-0 提问: 新手关于结构数组排序的提问

回复:
user: user-0
content: ，谢谢了，没看到，打漏了...

user: user-1
content: 其他的没有细看，这个是明显的错误呀 else if (pr[i].hour = pr[i-1].hour) ===> else if (pr[i].hour == pr[i-1].hour)

user: user-0
content: 我描述的问题是下面的代码出现的： （交换结构里的每个成员） while (answer4 == 'y')             {                 printf ("Please choose the standard(time(t) or rating(r)):\n");                 getchar ();                 scanf ("%c", &std );                 if (std == 't')                 {                     for (i = 1; i < num1; i++)                     {                         if (pr[i].hour < pr[i-1].hour)                             {                                 strcpy(pr[i-1].name,temp1);                                 temp2 = pr[i-1].rating;                                 temp3 = pr[i-1].hour;                                 temp4 = pr[i-1].minute;                                  strcpy(pr[i].name,pr[i-1].name);                                 pr[i-1].rating = pr[i].rating;                                 pr[i-1].hour = pr[i].hour;                                 pr[i-1].minute = pr[i].minute;                                  strcpy(temp1,pr[i].name);                                 pr[i].rating = temp2;                                 pr[i].hour = temp3;                                 pr[i].minute = temp4;                              }  这个是直接交换结构指针：  while (answer4 == 'y')             {                 printf ("Please choose the standard(time(t) or rating(r)):\n");                 getchar ();                 scanf ("%c", &std );                 if (std == 't')                 {                     for (i = 1; i < num1; i++)                     {                         if (pr[i].hour > pr[i-1].hour)                             ;                              else if (pr[i].hour < pr[i-1].hour)                              {                                 temp = pr[i-1];                                 pr[i-1] = pr[i];                                 pr[i] = temp;                              }

user: user-0
content: 程序可以运行，就是交换结构数据的时候，结构的第一个数据都变成了第一个结构的数据了。（他们原来是不一样的。只是排序，但运行时，其他结构的第一个数据都变成了第一个结构的第一个数据了）

user: user-2
content: ＜1000个元素，冒泡排序 ＜100000个元素，qsort函数 ＜10000000个元素，放数据库中，建索引，（B+树排序） ≥10000000个元素，没用到过。

user: user-1
content: 楼主是要研究排序算法吗？

user: user-3
content: char name [CSIZE];这个是怎么回事啊

user: user-2
content: 仅供参考： //学号 姓名 电话 成绩 //01 XXX 182XXXXXXXX 88 #include <stdio.h> #include <string.h> #define MAXS 10000 struct ST {     int XH;     char XM[11];     char DH[13];     int CJ; } st[MAXS],t; int n,i,j; char ln[80]; FILE *f; int main() {     f=fopen("in.txt","r");     if (NULL==f) {         printf("Can not open file in.txt!\n");         return 1;     }     i=0;     while (1) {         if (NULL==fgets(ln,80,f)) break;         if (4!=sscanf(ln,"%d%10s%12s%d",&st[i].XH,st[i].XM,st[i].DH,&st[i].CJ)) {             st[i].XH=0;             strcpy(st[i].XM,"Unknown");             strcpy(st[i].DH,"Unknown");             st[i].CJ=0;             printf("line %d format error:%s!\n",i+1,ln);         }         i++;         if (i>=MAXS) {             printf(">%d lines Ignored.\n",MAXS);             break;         }     }     fclose(f);     n=i;     for (i=0;i<n-1;i++) {         for (j=i+1;j<n;j++) {             if (st[i].CJ<st[j].CJ) {t=st[i];st[i]=st[j];st[j]=t}         }     }     for (i=0;i<n;i++) {         printf("%5d%10s%12s%4d\n",st[i].XH,st[i].XM,st[i].DH,st[i].CJ);     }     return 0; }

user: user-4
content: 百度一下撒 排序算法一大堆呢 代码有点长 也不知道你要我们帮你解答什么 是代码写的问题 还是逻辑有问题 还是算法有问题 还是运行时报错等等

user: user-5
content: 可以使用qsort，只会冒泡的路过