通过比较相邻元素的大小,并交换,把最大的值放在数组的末尾 第一次循环,把最大的值放在了最后 多次循环, 对于而言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从小到大排序:
代码优化:
#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");
}
运行结果如下: