| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 373 人关注过本帖
标题:通过快速排序对学生成绩进行排序,不知道为什么没有结果
只看楼主 加入收藏
你不想去那儿
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:56
专家分:114
注 册:2012-9-21
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:2 
通过快速排序对学生成绩进行排序,不知道为什么没有结果
程序代码:
#include<stdio.h>
#include<string.h>
struct Student
{
    char num[6];
    char name[10];
    int math;
    int english;
    int general;
};
struct Student stu[100]={{"05001","Jam",78,68,146},{"05002","Bill",80,98,178},{"05003","Bob",82,83,165},{"05004","Sam",69,82,151},{"05005","Steven",94,83,177}};
void exchange(struct Student stu[],struct Student *p1,struct Student *p2)        //交换函数
{
    int matht,englisht,generalt;
    char namet[10],numt[6];
    strcpy(numt,p1->num);strcpy(p1->num,p2->num);strcpy(p2->num,numt);
    strcpy(namet,p1->name);strcpy(p1->name,p2->name);strcpy(p2->name,namet);
    matht=p1->math;p1->math=p2->math;p2->math=matht;
    englisht=p1->english;p1->english=p2->english;p2->english=englisht;
    generalt=p1->general;p1->general=p2->general;p2->general=generalt;
}

void bubble(struct Student stu[],int l,int h)        //冒泡排序函数
{
    int i,j;
    for(i=h;i<=l;i--)
        for(j=l;j<i;j++)
            if(strcmp(stu[j].num,stu[j+1].num)==1)
                exchange(stu,&stu[j],&stu[j+1]);
}

void main()        //信息排序(快速排序,将数据分为较小与较大两部分,在分别进行冒泡排序)
{
    int i,j,k;
    int i1,j1;
    int hign,midle;
    char key[6];
    struct Student *p1,*p2;
    strcpy(key,stu[0].num);
    for(k=0;k<100;k++)
    if(stu[k].num[0]==NULL)
    {
        hign=k-1;
        break;
    }
    for(i=0,j=hign;i==j;)
    {
        if(strcmp(stu[i].num,key)==-1)
        {
            i++;
            i1=0;
        }
        else
            i1=1;
        if(strcmp(stu[j].num,key)==1)
        {
            j--;
            j1=0;
        }
        else
            j1=1;
        while(i1&&j1)
        {
            p1=&stu[i];
            p2=&stu[j];
            exchange(stu,p1,p2);        //交换
        }
    }
    midle=i;;
    bubble(stu,0,midle);        //冒泡排序
    bubble(stu,midle+1,hign);
    for(i=0;i<100;i++)
        if(stu[i].num!=NULL)
            printf("%s    %s    %d    %d    %d\n",stu[i].num,stu[i].name,stu[i].math,stu[i].english,stu[i].general);
}
搜索更多相关主题的帖子: english 快速 general color 
2012-12-21 11:08
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:20 
先使用单一冒泡测试一下效果  再改良

要一步一步的来

DO IT YOURSELF !
2012-12-21 11:09
你不想去那儿
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:56
专家分:114
注 册:2012-9-21
收藏
得分:0 
单一冒泡可以运行,整体还是不行
我想可能是这部分的原因
程序代码:
    for(k=0;k<100;k++)
    if(stu[k].num[0]==NULL)
    {
        hign=k-1;
        break;
    }
    for(i=0,j=hign;i==j;)
    {
        if(strcmp(stu[i].num,key)==-1)
        {
            i++;
            i1=0;
        }
        else
            i1=1;
        if(strcmp(stu[j].num,key)==1)
        {
            j--;
            j1=0;
        }
        else
            j1=1;
        while(i1&&j1)
            exchange(stu,&stu[i],&stu[j]);        //交换
    }
2012-12-21 11:25
快速回复:通过快速排序对学生成绩进行排序,不知道为什么没有结果
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.038053 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved