| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1011 人关注过本帖
标题:学生成绩排序问题
只看楼主 加入收藏
bluewolf168
Rank: 2
等 级:论坛游民
帖 子:10
专家分:10
注 册:2017-1-6
结帖率:50%
收藏
已结贴  问题点数:5 回复次数:5 
学生成绩排序问题
# include <stdio.h>
# include <malloc.h>
# include <stdlib.h>
struct Students
{
    int Sid;
    char Name[20];
    char Gender;
    float Score;
};
void InputData(struct Students * , int len);
void OutputData(struct Students * , int len);
void Rank(struct Students * , int len );
int main (void)
{
    int len;

    printf ("请输入学生人数:\n");
    printf ("len = ");
    scanf ("%d", &len);

    struct Students * Pst;
    Pst = (struct Students *)malloc(sizeof(struct Students) * len);

    InputData(Pst, len);
    Rank(Pst, len);
    OutputData(Pst, len);


    system("pause");
    return 0;
}

void InputData(struct Students * pst, int len)
{
    int i;
   
    for (i = 0; i < len; i++)
    {
        printf ("请输入第 %d 个学生的信息:\n", i+1);
        printf ("Sid = ");
        scanf ("%d", &pst[i].Sid);
        printf ("Name = ");
        scanf ("%s", pst[i].Name);
        printf ("Gender = ");
        scanf ("%*c%c", &pst[i].Gender);
        printf ("Score = ");
        scanf ("%f", &pst[i].Score);
    }
        
}

void OutputData(struct Students * pst, int len)
{
    int i;
    for(i = 0; i < len; i++)
    {
        printf ("\n\n第 %d 个学生的信息如下:\n", i+1);
        printf ("Sid = %d\n", pst[i].Sid);
        printf ("Name = %s\n", pst[i].Name);
        printf ("Gender = %c\n", pst[i].Gender);
        printf ("Score = %f\n", pst[i].Score);
    }
}
//以下是错的。
void Rank (struct Students * pst, int len)
{
    struct Students st;
    int i;
    for (i = 0; i < len; i++)
    {
        if (pst[i].Score <  pst[i+1].Score)
        {
            st = pst[i];
            pst[i] = pst[i+1];
            pst[i+1] = pst[i];            
        }
   
    }
}
请问我哪错了?使用Rank函数进行冒泡排序
搜索更多相关主题的帖子: include 
2017-01-13 08:43
书生牛犊
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:星夜征程
等 级:贵宾
威 望:10
帖 子:1101
专家分:5265
注 册:2015-10-27
收藏
得分:3 
冒泡排序算法复杂度是O(N^2),也就是说应该是两层嵌套循环

程序代码:
void Rank (struct Students * pst, int len)
{
    struct Students st;
    int i;
    for(int j=0;j<len;j++)
    for (i = j; i < len; i++)
    {
        if (pst[i].Score <  pst[i+1].Score)
        {
            st = pst[i];
            pst[i] = pst[i+1];
            pst[i+1] = pst[i];           

        }
  

    }
}





φ(゜▽゜*)♪
2017-01-13 09:16
吹水佬
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:451
帖 子:10607
专家分:43186
注 册:2014-5-20
收藏
得分:3 
void Rank (struct Students * pst, int len)
{
    struct Students st;
    int i,j;
    for (i=0; i<len-1; i++)
    {
        for (j=i+1; j<len; j++)
        {
            if (pst[i].Score <  pst[j].Score)
            {
                st = pst[i];
                pst[i] = pst[j];
                pst[j] = st;            
            }
        }
    }
}

[此贴子已经被作者于2017-1-13 09:37编辑过]

2017-01-13 09:35
bluewolf168
Rank: 2
等 级:论坛游民
帖 子:10
专家分:10
注 册:2017-1-6
收藏
得分:0 
谢谢你的指点 得以知道一个知识点


[此贴子已经被作者于2017-1-13 09:51编辑过]

2017-01-13 09:40
书生牛犊
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:星夜征程
等 级:贵宾
威 望:10
帖 子:1101
专家分:5265
注 册:2015-10-27
收藏
得分:0 
回复 4楼 bluewolf168
参考吹水佬的吧,,,我的代码不规范,没用花括号括起来,不易于阅读理解

φ(゜▽゜*)♪
2017-01-13 09:42
bluewolf168
Rank: 2
等 级:论坛游民
帖 子:10
专家分:10
注 册:2017-1-6
收藏
得分:0 
谢谢两位前辈!

[此贴子已经被作者于2017-1-13 09:48编辑过]

2017-01-13 09:44
快速回复:学生成绩排序问题
数据加载中...
 
   



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

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