陌离 2017-10-27 08:35 采纳率: 0%
浏览 1211

C语言排序问题,冒泡法

#include
#include
#include
typedef struct user{
char name[20]; //玩家用户名
double score; //游戏所用时间
}User;
void sortByName() ;
void setRecord() //写入文件记录
{
User use[5]={{"xiangwang",7},{"xiangli",2},{"xiangzhang",5},{"q",4},{"w",3}};

FILE *fp;
fp=fopen("D:\\timerank.dat","wb");
if(fp==0)
{
    printf("写入失败\n");
    exit(1); 
}   
fwrite(use,sizeof(use),1,fp);
fclose(fp);
sortByName();

}
void sortByName() //储存到文件,排序后输出
{
int choose;
int i,j;
int k=1;
User TempS;/* 定义进行操作时的临时结构体变量 */
User s[10];
int recNumber=0;
FILE *fp=NULL;
fp=fopen("D:\timerank.dat","rb");

    /* 将文件中要排序的信息存入结构体数组 */
while(fread(&s[recNumber],sizeof(User),1,fp)!=0)
{
    recNumber++;
}

fclose(fp);

for(i=0;i<recNumber-1;i++)
{       
    for(j=0;j<recNumber-1-i;j++)
        {
            if(s[j].score>s[j+1].score)
            {
                strcpy(TempS.name,s[j].name);
                strcpy(s[j].name,s[j+1].name);
                strcpy(s[j+1].name,TempS.name);
                /*TempS.name=s[j].name;
                s[j].name=s[j+1].name;
                s[j+1].name=TempS.name;*/
                TempS.score=s[j].score;
                s[j].score=s[j+1].score;
                s[j+1].score=TempS.score;
            }

        }
        /* 将排序好的记录写入文件 */

    fp=fopen("D:\\timerank.dat","wb");

    for(i=0;i<recNumber;i++)
    {
    fwrite(&s[i],sizeof(User),1,fp);

    }
    fclose(fp);

}

}

void print()
{ User TempS;/* 定义进行操作时的临时结构体变量 */
int choose;
int k=1;
FILE *fp;
fp=fopen("D:\timerank.dat","rb");
if(fp==NULL)
{
printf("文件错误\n");

    }
    printf("排名\t玩家姓名\t\t所用时间\n");
    while(fread(&TempS,sizeof(User),1,fp)!=0)
    {   if(k<6){ 
        printf("%d\t%s\t\t%lf\n",k++,TempS.name,TempS.score);
        } 
    }
    fclose(fp); 

}

int main()
{
setRecord();
sortByName();
print();

}
输出结果并不能完全排序呢?

  • 写回答

1条回答 默认 最新

  • jssmartstar 2017-10-28 03:28
    关注

    经典的算法,建议再看下数据结构那本书

    评论

报告相同问题?

悬赏问题

  • ¥20 sub地址DHCP问题
  • ¥15 delta降尺度计算的一些细节,有偿
  • ¥15 Arduino红外遥控代码有问题
  • ¥15 数值计算离散正交多项式
  • ¥30 数值计算均差系数编程
  • ¥15 redis-full-check比较 两个集群的数据出错
  • ¥15 Matlab编程问题
  • ¥15 训练的多模态特征融合模型准确度很低怎么办
  • ¥15 kylin启动报错log4j类冲突
  • ¥15 超声波模块测距控制点灯,灯的闪烁很不稳定,经过调试发现测的距离偏大