利用冒泡排序法和选择排序法将学生的成绩从高到低输出
这里就不给出二者的概念,你自己去理解自己去总结才是最有效的。一.选择排序法/*这是利用选择排序法排序*/#include<stdio.h>int main(){int a[10];int i=0,j=0,t;for(i=0;i<10;i++)scanf("%d",&a[i]
这里就不给出二者的概念,你自己去理解自己去总结才是最有效的。
一.选择排序法
/*这是利用选择排序法排序*/
#include<stdio.h>
int main()
{
int a[10];
int i=0,j=0,t;
for(i=0;i<10;i++)
scanf("%d",&a[i]);
for(i=0;i<10;i++)
{
for(j=i+1;j<10;j++)
{
if(a[i]<a[j])
{
t=a[i];
a[i]=a[j];
a[j]=t;
}
}
}
for(i=0;i<10;i++)
printf("%d",a[i]);
return 0;
}
以下按照从大到小排序
我们随机输入10个数
0 1 2 3 4 5 6 7 8 9
1.第一个数组元素与第二个数组元素比较,若前者小于后者,交换二者的值。
交换前:0 1 2 3 4 5 6 7 8 9
交换后:1 0 2 3 4 5 6 7 8 9
2.继续将第一个数组元素与第三个数组元素比较。若前者小于后者,交换二者的值。
交换前:1 0 2 3 4 5 6 7 8 9
交换后:2 0 1 3 4 5 6 7 8 9
3.将第一个数组元素与第四个数组元素,第五个数组元素,······,第十个数组元素比较,前者小就交换,反之就不交换。
交换前:2 0 1 3 4 5 6 7 8 9
······
交换后:9 0 1 2 3 4 5 6 7 8
4.经过第一轮交换后,数组中第一个元素是整个数组元素中的最大的。接下来我们进行第二轮交换。将第二个数组元素分别于第三个数组元素,第四个数组元素,第五个数组元素,······,第十个数组元素比较,前者大就交换,否则不交换。
交换前:9 0 1 2 3 4 5 6 7 8
交换后:9 8 0 1 2 3 4 5 6 7
5.第三个数组元素,第四个数组元素,······第十个数组元素按照上述方法进行。
最终排序结果:9 8 7 6 5 4 3 2 1 0
二.冒泡排序法
#include<stdio.h>
#define N 10
main()
{
int a[10];
int i,j,x;
for(i=0;i<N;i++)
scanf("%d",&a[i]);
for(i=0;i<N;i++)
{
for(j=0;j<N-i-1;j++)
{
if(a[j]<a[j+1])
{
x=a[j];
a[j]=a[j+1];
a[j+1]=x;
}
}
}
for(i=0;i<10;i++)
printf("%d ",a[i]);
}
以下按照从大到小排序
我们随机输入10个数
0 1 2 3 4 5 6 7 8 9
第一轮交换:将第一个元素与第二个元素比较,前者小则交换二者的值,反之不交换。再将第二个数组元素与第三个数组元素比较,前者小就交换,反之不交换,以此类推,这时最小的那个元素被调换到最后一位。
交换前:0 1 2 3 4 5 6 7 8 9
交换后:1 2 3 4 5 6 7 8 9 0
第二轮交换:与第一轮交换类似,也是从第一个元素开始比较,不过由于经过第一轮交换后,最小的那个元素已经被调换到数组末位,所以第二轮交换只对前9个元素进行。
交换前:1 2 3 4 5 6 7 8 9 0
交换后:2 3 4 5 6 7 8 9 1 0
······
第九轮交换:
交换前:8 9 7 6 5 4 3 2 1 0
交换后:9 8 7 6 5 4 3 2 1 0
冒泡排序与选择排序总结:
1.二者都要经过N-1轮交换(N是用户输入数字的个数)。
2.冒泡排序的每一轮交换是基于相邻元素,不存在第三个元素与第五个元素的交换(因为二者不是相邻元素)。而选择排序可以跨区间交换。
3.不管是从大到小排序还是从小到大排序,上述代码不变,只是将大于号换成小于号,或者将小于号换成大于号。
更多推荐
所有评论(0)