读书人

插入排序的有关问题

发布时间: 2013-03-22 09:49:50 作者: rapoo

插入排序的问题
#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个元素的数组,跟踪看看
[解决办法]

引用:
引用:你这个是一边录入数据,一边调用插排。
黑色部分的代码,从第一次调用开始看,你最大的数是排在数组第一位的。
所以第一个for循环,从a0开始找,你break出来的a[i],就是应该紧排在score后面。
不用担心数组A中是不是还有其它数是在a[i]与score之间,因为这个就是把score插到一个有序数据中。

你n传的是……


你的这个void insert_sort(int num[],int a[],int n,int number,int score)函数,返回值是void,所以你直接return,不给返回值,是没问题的。你每次调用这个函数的时候,int num[],int a[],这两个是做传入传出参数,在insert_sort()函数内,修改的是这两个数组,通过修改这两个数组,来起到记录排序结果的作用,而不是通过函数的返回值。

结合你这个例子,n是int num[],int a[]这两个数组的元素个数。你如果i>n了,也就没有意义了。而且你后面有用到num[i],a[i],在这个时候,你这个就已经是数组越界了。所以加了一个判断i>n,就直接return返回了。return的功能就是“退出”当前这个函数。你可以网上搜一下了。

读书人网 >C语言

热点推荐