首页 学无止境C语言笔记正文

冒泡排序与选择排序实列笔记

冒泡排序

1.冒泡排序思想

让数组当中相邻的两个数进行比较,数组当中比较小的数值向下沉,数值比较大的向上浮!外层for循环控制循环次数,内层for循环控制相邻的两个元素进行比较。

选择排序

1.选择排序思想

选择排序,从头至尾扫描序列,找出最小的一个元素,和第一个元素交换,接着从剩下的元素中继续这种选择和交换方式,最终得到一个有序序列。

#include<stdio.h>
void main(){
	int s[4][5]={};
	int sum[4]={};
	double sum1[5]={};
	double sum2[5]={};
	//输入成绩
	int i,j;
	for(i=0;i<4;i++){
		for(j=0;j<5;j++){
			printf("请输入%d号同学的第%d门成绩:",i+1,j+1);
			scanf("%d",&s[i][j]);	
		}
	}//输入结束
	 for(i=0;i<4;i++){
	 	for(j=0;j<5;j++){
	 		sum[i]+=s[i][j];
		}
	}//循环累加每名同学的总成绩 
		printf("\n*****************\n");
		
	 		for(i=0;i<4;i++){
			 	printf("%d号的总成绩是",i+1);
	 			printf("%d\n",sum[i]);
	 		}//循环输出每名同学的总成绩 
	 		printf("*****************\n");
				for(i=0;i<5;i++){
	 				for(j=0;j<4;j++){
	 					sum1[i]+=s[j][i];
					}
	  			}//循环累加每门课程所有同学的成绩 
					  for(i=0;i<5;i++){
						printf("第%d门的平均成绩是",i+1);
						sum2[i]=sum1[i]/5.0;
	 					printf("%.2f\n",sum2[i]);
	 					 
	 				}//循环输出每门课程的平均成绩 
				printf("*****************\n");
				int t;//第三方交换变量 
				for(i=0;i<3;i++){
					for(j=0;j<3-i;j++){
						if(sum[j]<sum[j+1]){
							t=sum[j];
							sum[j]=sum[j+1];
							sum[j+1]=t;
						}
					}
				}//循环进行冒泡排序 ---降序 
				printf("冒泡降序后的总分成绩:");
				for(i=0;i<4;i++){
					printf("%d  ",sum[i]); 
				}//输出冒泡排序后的数值 
				printf("\n*****************\n");
				
				double a;//第三方交换变量 注意数据类型转换 
				for(i=0;i<4;i++){
					for(j=0;j<4-i;j++){
						if(sum2[j]>sum2[j+1]){
							a=sum2[j];
							sum2[j]=sum2[j+1];
							sum2[j+1]=a;
						}
					}
				}//循环进行冒泡排序 ----升序 
				printf("冒泡升序后的课程平均成绩:");
				for(i=0;i<5;i++){
					printf("%.2f  ",sum2[i]); 
				}//输出冒泡排序后的数值 
				printf("\n*****************\n");
				
				//下面开始选择排序 
				int b;//第三方交换变量
				for(i=0;i<3;i++){
					for(j=i+1;j<4;j++){
						if(sum[i]<sum[j]){
							b=sum[i];
							sum[i]=sum[j];
							sum[j]=b;
						}
					}
				}//循环进行选择排序 ---降序 
				printf("选择降序后的总分成绩:");
				for(i=0;i<4;i++){
					printf("%d  ",sum[i]); 
				}//输出选择排序后的数值 
				printf("\n*****************\n");
				double c;//第三方交换变量  注意数据类型转换 
				for(i=0;i<4;i++){
					for(j=i+1;j<5;j++){
						if(sum2[i]>sum2[j]){
							b=sum2[i];
							sum2[i]=sum2[j];
							sum2[j]=b;
						}
					}
				}//循环进行选择排序 ---升序 
				printf("选择升序后的课程平均成绩:");
				for(i=0;i<5;i++){
					printf("%.2f  ",sum2[i]); 
				}//输出选择排序后的数值 
}


本文标题:冒泡排序与选择排序实列笔记
本文链接:https://dingqidong.com/?id=113
作者授权:除特别说明外,本文由 By无邪 原创编译并授权 无邪-blog 刊载发布。
版权声明:本文使用「署名-非商业性使用-相同方式共享 4.0 国际」创作共享协议,转载或使用请遵守署名协议。

评论