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();

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

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