笔记

118 阅读1分钟

通过比较相邻元素的大小,并交换,把最大的值放在数组的末尾 第一次循环,把最大的值放在了最后 多次循环, 对于而言arr[n] 至少循环[n-1]次

#include <stdio.h>
int main(){
	int arr[5];
	for(int i=0;i<5;i++){
		scanf("%d",&arr[i]);
	}
	for(int i = 0;i<4;i++){
		for(int j=0;j<4;j++){
			if(arr[j]>arr[j+1]){
				int temp = arr[j];
				arr[j]= arr[j+1];
				arr[j+1]=temp;
			}
		}
	}
	for(int i = 0;i<5;i++){
		printf("%d\n",arr[i]);
	}
}





对54321从小到大排序:

image.png

代码优化:

#include <stdio.h>
int main(){
	//从键盘输入5个数,从小到大排序,输出 
	int arr[5];
	//1 2 3 5 4 
	for(int i=0;i<5;i++){
		scanf("%d",&arr[i]);
	}
	//通过一个for循环,比较相邻的两个元素,做交换
	//把最大的元素换到数组的最后一个位置 
	for(int i = 0;i<4;i++){
		//假设没有交换 
		int isSwitch = 0; 
		for(int j=0;j<4-i;j++){
			//j,j+1
			if(arr[j]>arr[j+1]){//做交换 
				int temp = arr[j];
				arr[j]= arr[j+1];
				arr[j+1]=temp;
				isSwitch = 1;//有交换 
			}
		}
		//如果一次交换都没有发生,说明已经有序的,不用再循环 
		if(isSwitch == 0){
			break;
		}
	}
	for(int k = 0;k<5;k++){
			printf("%d",arr[k]);
		}
	printf("\n");
}


运行结果如下:

image.png