读书人

C如何排序

发布时间: 2012-02-26 20:19:45 作者: rapoo

C怎么排序
比如1,2,5,4,3;
要输出最大数(5)在第几个位置,下一个(4)在第几个位置,下一个(3)。。。
用for循环或者指针之类的,最好不要用节点了。

[解决办法]
明白楼主的意思,打个比方就是要给学生成绩单的成绩后面写上名次,而不需要交换成绩的顺序。这用for循环很好实现,第一次将成绩单从头开到尾,找到最大的,标上名次1;第二次再将成绩单从头看到尾,在剩下的同学当中找到最大的,标上名次2; ……以此类推。

C/C++ code
#include <stdio.h>int main() {   int i,j,max,imax;   int a[]={10,20,50,40,30 }; //不妨假定对应于学生的成绩  int b[]={0,0,0,0,0};   //成绩名次排好前都假定名次为0  int n=sizeof(a)/sizeof(a[0]);    for (i=0;i<n;i++)     {        max=0;        //每次找最好成绩前先假定一个足够低的成绩为最好成绩       for (j=0;j<n;j++)        {             if ((b[j]==0) && (a[j] > max)) //如果发现有更高的成绩则操作如下:                {                max=a[j];                  //修正最高成绩max                imax=j;                    //修正取得最高成绩的同学的号码到imax              }          }        b[imax]=i+1;     //通过遍历了一次成绩单,找到了第i+1名高分,记录为imax同学的名次    }    for(i=0;i<n;i++)    printf("%d(%d) ",a[i],b[i] );  //输出成绩和名次表printf("\n"); } 

读书人网 >C++

热点推荐