利用冒泡排序法和选择排序法将学生的成绩从高到低输出

这里就不给出二者的概念,你自己去理解自己去总结才是最有效的。
一.选择排序法

/*这是利用选择排序法排序*/
#include
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]

以下按照从大到小排序

我们随机输入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
#define N 10
main()
{
	int a[10];
	int i,j,x;
	for(i=0;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.不管是从大到小排序还是从小到大排序,上述代码不变,只是将大于号换成小于号,或者将小于号换成大于号。

你可能感兴趣的:(C)