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"); }