在上篇文章排序中,代码仍然可以进一步优化
首先:将循环的次数优化,如果顺序是有序的,就不用再进行排序
其次:已经排序过的数就不再进行重复比较排序
#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++){
int isSwitch = 0;
for (int j = 0; j < 4 - i; j++){
if(arr[j] > arr[j+1]){
int temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
if(isSwitch == 0){
break;
}
printf("-------------------\n");
for(int i = 0; i < 5; i++){
printf("%d\n",arr[i]);
}
}
}
具体更新在:
8-9和21-22行,定义了一个isSwitch,这个是用来判断原本输入的数是否有序,若有序则不进行排序。
11行,将j < 4改成了j < 4 - i。这样可以避免已经排序好的数值再次进行排序的判断。