选择排序的优化
#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");
}
运行结果: