c语言代码看不懂求大神解释,急急急急急急急急急急急急~~~~~~~~~~~~~~~~~~~~~~~
新手初学c语言,我在网上找到了一个学生成绩信息管理系统的源代码,里面关于排序的代码看不懂,求大神讲解一下,麻烦说的清楚些,谢谢!这是循环的部分代码,就拿其中的一个来说,对...
新手初学c语言,我在网上找到了一个学生成绩信息管理系统的源代码,里面关于排序的代码看不懂,求大神讲解一下,麻烦说的清楚些,谢谢!
这是循环的部分代码,就拿其中的一个来说,对学生平均成绩排序,就是这几个套的循环看不懂
i,j为定义的变量,count为学生个数,sort—type为自己定义的排序类型,就是平均成绩的排序。
case 5:
{
for(i=0;i<count-1;i++)
{
for(j=0;j<count-i-1;j++)
{
if(stu[j].avg<stu[j+1].avg)
{
temp=stu[j];
stu[j]=stu[j+1];
stu[j+1]=temp;
}
}
}
sort_type=5;
break;
} 展开
这是循环的部分代码,就拿其中的一个来说,对学生平均成绩排序,就是这几个套的循环看不懂
i,j为定义的变量,count为学生个数,sort—type为自己定义的排序类型,就是平均成绩的排序。
case 5:
{
for(i=0;i<count-1;i++)
{
for(j=0;j<count-i-1;j++)
{
if(stu[j].avg<stu[j+1].avg)
{
temp=stu[j];
stu[j]=stu[j+1];
stu[j+1]=temp;
}
}
}
sort_type=5;
break;
} 展开
展开全部
1.temp=stu[j];stu[j]=stu[j+1];stu[j+1]=temp; 这是数组里面两个相连的数调换位置
2.if(stu[j].avg<stu[j+1].avg)这是调换位置的条件,合起来意思是如果数组里一个数小于其后的一个数,则把两个数调换位置。
3.for(j=0;j<count-i-1;j++) 循环语句,这样的话一开始第一次i=0,到一次循环结束总共发生了count-1
调换。和1,2一起看就可以理解成:每次都是把相邻的两个数调换,如果相邻的数前面一个数小于其后的一个数,则把两个数调换位置,反之则不调换。这样执行了count-1次,循环结束。整个数组里,最后面一个数一定是最小的一个数。
4.for(i=0;i<count-1;i++)循环语句,i=0时,1,2,3语句执行后,将最小的一个数置于数组最后一个位置。然后i=1,3语句只需要执行count-2次,就可以把数组中第二小的数置于数组倒数第二的位置。然后i=2.......
2.if(stu[j].avg<stu[j+1].avg)这是调换位置的条件,合起来意思是如果数组里一个数小于其后的一个数,则把两个数调换位置。
3.for(j=0;j<count-i-1;j++) 循环语句,这样的话一开始第一次i=0,到一次循环结束总共发生了count-1
调换。和1,2一起看就可以理解成:每次都是把相邻的两个数调换,如果相邻的数前面一个数小于其后的一个数,则把两个数调换位置,反之则不调换。这样执行了count-1次,循环结束。整个数组里,最后面一个数一定是最小的一个数。
4.for(i=0;i<count-1;i++)循环语句,i=0时,1,2,3语句执行后,将最小的一个数置于数组最后一个位置。然后i=1,3语句只需要执行count-2次,就可以把数组中第二小的数置于数组倒数第二的位置。然后i=2.......
展开全部
冒泡排序(Bubble Sort),是一种计算机科学领域的较简单的排序算法。
它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。
这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端,故名。
由于冒泡排序简洁的特点,它通常被用来对于计算机程序设计入门的学生介绍算法的概念。
冒泡排序算法的运作如下:
比较相邻的元素。如果第一个比第二个大,就交换他们两个。
对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。
针对所有的元素重复以上的步骤,除了最后一个。
持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较
c语言描述
void bubbleSort(int arr[],int n)
{
int i,j,t;
for(i=0;i<n-1;i++)
for(j=0;j<n-i-1;j++)
if(arr[j+1]<arr[j])
{
t=arr[j+1];
arr[j+1]=arr[j];
arr[j]=t;
}
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
case 5:
{
for(i=0;i<count-1;i++) //循环次数为count-1
{
for(j=0;j<count-i-1;j++) //从第一个数到当前需要检查到的数进行数据检查。已确定的数就不再检查了,这种方法应该叫沉底法,呵呵。即:第一次循环找到最小的数,放到最后一位,第二次循环找到次小的数,放到倒数第二位,依次类推,count-1次后,所有的数就都排好了。
{
if(stu[j].avg<stu[j+1].avg) //拿当前数与其后面的数进行比较,如果当前数小,就进行交换,以保证小的数向后移动。
{
temp=stu[j]; //这三行是完成两数的交换
stu[j]=stu[j+1];
stu[j+1]=temp;
}
}
}
sort_type=5;
break;
}
{
for(i=0;i<count-1;i++) //循环次数为count-1
{
for(j=0;j<count-i-1;j++) //从第一个数到当前需要检查到的数进行数据检查。已确定的数就不再检查了,这种方法应该叫沉底法,呵呵。即:第一次循环找到最小的数,放到最后一位,第二次循环找到次小的数,放到倒数第二位,依次类推,count-1次后,所有的数就都排好了。
{
if(stu[j].avg<stu[j+1].avg) //拿当前数与其后面的数进行比较,如果当前数小,就进行交换,以保证小的数向后移动。
{
temp=stu[j]; //这三行是完成两数的交换
stu[j]=stu[j+1];
stu[j+1]=temp;
}
}
}
sort_type=5;
break;
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
这是一个简单的冒泡排序选法,把stu[]从大到小排序~
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询