奇怪的排序问题!!!
程序实现10个学生三门课成绩的输入,求出总成绩后并按高低从高到低排序。试过很多版本的冒泡排序法,但都不能实现正常排序(当学生人数N较小时却可以正常排序)
请大虾指教!!!(下面的程序在排序时通过交换指向数组的数组指针来实现排序,没有改变数据的位置)
#include <stdio.h>
#include <string.h>
#define N 10
struct student {
long num;
int math_score;
int eng_score;
int com_score;
int totle;
float ave;
};
void order(struct student array[] , struct student *poi[]);
void main()
{
int i;
struct student p[N];
struct student *point[N];
printf ( "%s%s ", "please input source data:\n ",
"Student 's ID -- Maths score -- English score -- Computer score \n ");
for (i = 0; i < N; i++)
{
scanf( "%ld %d %d %d ",&p[i].num ,&p[i].math_score ,&p[i].eng_score, &p[i].com_score);
p[i].totle = p[i].math_score + p[i].eng_score + p[i].com_score;
p[i].ave = (float)p[i].totle/3;
point[i] = p+i ;
}
printf( "the ordered list is:\n "
"%5s %15s %10s %10s %10s %10s %10s\n ", "order ", "ID ", "maths ", "English ", "Computer ", "Totle ", "Average ");
order(p , point);
}
void order (struct student array[] , struct student *poi[])
{
struct student *temp;
int i,j,k,n;
for(j = N - 1; j > 0; j--)
for(i = 0; i < j; i++)
{
k = i + 1;
if(array[i].ave > array[k].ave)
{
temp = poi[i];
poi[i] = poi[k];
poi[k] = temp;
}
}
n=0;
for(i=0;i <N ;i++)
{
printf( "%3d %18ld %8d %10d %10d %12d %8.2f\n ",n + 1,poi[i]-> num,poi[i]-> math_score ,poi[i]-> eng_score , poi[i]-> com_score , poi[i]-> totle , poi[i]-> ave);
n++;
printf( "\n ");
}
}
[解决办法]
/*if(array[i].ave > array[k].ave) */
if ( poi[i]-> ave > poi[k]-> ave )
{
temp = poi[i];
poi[i] = poi[k];
poi[k] = temp;
}