标题:结构体数组使用函数实现选择排序为何排序失败呢?
只看楼主
S140131022
Rank: 2
来 自:重庆邮电大学
等 级:论坛游民
帖 子:205
专家分:35
注 册:2014-10-9
结帖率:90.24%
已结贴  问题点数:20 回复次数:3 
结构体数组使用函数实现选择排序为何排序失败呢?
//以结构体指针作为函数的参数处理

#include<stdio.h>

struct Lesson
{
    float math;
    float art;
};

struct Student
{
    char name[5];
    struct Lesson grade;  
};

int main()
{
    void convert(struct Student *p,int k);
    int i;
    struct Student stu[5];
    struct Student *p;
    p=stu;
    for(i=0;i<5;i++)
    {
        scanf("%f,%f,%s",&((*p).grade.art),&((*p).grade.math),&((*p).name));   //注意结构体数组指针的写法问题,因为涉及到符号优先级的问题!
        p++;
    }
    puts("The Information data is: ");
    p=stu;
    for(i=0;i<5;i++)
    {
        printf("%s %.1f %.1f\n",(*p).name,(*p).grade.art,(*p).grade.math);
        p++;
    }
    p=stu;
    convert(p,5);
    puts("The converted array is:");
    for(i=0;i<5;i++)
    {
        printf("%s %.1f %.1f\n",(*p).name,(*p).grade.art,(*p).grade.math);
        p++;
    }
    return 0;
}

void convert(struct Student *p,int k)                     //函数实现选择排序为何屡屡失败呢?
{
    struct Student exo;
    int i,j,m;
    for(i=0;i<k-1;i++)
    {
        m=i;
        for(j=1;j<k;j++)
        {
            if((*(p+j)).grade.math<(*(p+m)).grade.math)
            m=j;
        }
        if(m!=i)
        {
            exo=*(p+m);
            *(p+m)=*(p+i);
            *(p+i)=exo;
        }        
    }
}


//找不到原因!感觉没有错误啊~根据math成绩高低进行排序,此处使用选择排序,但是却排序失败!
搜索更多相关主题的帖子: convert include 结构体 优先级 
2015-04-09 14:32
wyw19880809
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:3
帖 子:178
专家分:738
注 册:2013-3-14
得分:7 
选择排序法 可以用j=i为初值,避免无效比较,调试跟进去看下实现排序了没呗

[ 本帖最后由 wyw19880809 于 2015-4-9 15:00 编辑 ]
2015-04-09 14:52
TAAAAB
Rank: 7Rank: 7Rank: 7
来 自:湖南
等 级:黑侠
威 望:1
帖 子:243
专家分:635
注 册:2011-5-29
得分:7 
可以参考下
程序代码:
void convert(struct Student *p,int k)   
{
    struct Student exo;
    int i,j;
    for(i = 0; i < k - 1; i++)
    {
        for(j = i + 1;j < k; j++)        
            if(p[i].grade.math < p[j].grade.math)
            {
                exo = p[i];
                p[i] = p[j];
                p[j] = exo;
            }        
    }
}

人有多懒,编程就有多难。
2015-04-09 15:14
诸葛欧阳
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:流年
等 级:贵宾
威 望:82
帖 子:2790
专家分:14619
注 册:2014-10-16
得分:7 
程序代码:
 for(j=1;j<k;j++)//j=i+1
        {
            if((*(p+j)).grade.math<(*(p+m)).grade.math)
            m=j;
        } 

一片落叶掉进了回忆的流年。
2015-04-09 16:11



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-443751-1-1.html




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

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