插入排序的问题
#include<stdio.h>
void insert_sort(int num[],int a[],int n,int number,int score)
{
int i,j;
for(i=0;i<n;i++)
if(score>a[i])break;
if(i>=n)return;
for(j=n-1;j>i;j--)
{
num[j]=num[j-1];
a[j]=a[j-1];
}
num[i]=number;a[i]=score;
}
int main()
{
int i,num[10],a[10],number,score;
for(i=0;i<10;i++)
{
a[i]=0;num[i]=0;
}
for(;;)
{
printf("\n number score =?");
scanf("%d %d",&number,&score);
if(number<0||score<0)break;
insert_sort(num,a,10,number,score);
}
for(i=0;i<10;i++)
printf("\n %d %d",num[i],a[i]);
printf("\n");
}
输入任意个学生的学号和成绩,然后按顺序输出前10名的成绩。
如上黑体,那个break语句的作用、还有return返回的是什么呢?这两句有点怪异呀,求大神指教啊 c语言,排序算法
[解决办法]
break意思是以前的都排好序了,如果大于就可以不看后面的了,
return的意思是防止越界;
没错就是写的不好,这个是某个学生的课堂作业吧,楼主还是不要研究了。
[解决办法]
你这个是一边录入数据,一边调用插排。
黑色部分的代码,从第一次调用开始看,你最大的数是排在数组第一位的。
所以第一个for循环,从a0开始找,你break出来的a[i],就是应该紧排在score后面。
不用担心数组A中是不是还有其它数是在a[i]与score之间,因为这个就是把score插到一个有序数据中。
你n传的是10,return就是超过了你给的n值,score排不到前n名,不用再算了,直接return掉。也省的后面的处理万一出现数组越界等问题。
后面的for循环就是把i之后的数据都往后移动一个,把score和number放到i的位置。
排好了。
[解决办法]
那个break语句的作用是表示已经找到比score小的的元素的位置了,return是防止越界。
[解决办法]
google 基本语法
或
输入个3,5个元素的数组,跟踪看看
[解决办法]