
#include <stdio.h>
#define Max 5
int main(int argc, const char * argv[]) {
int a[Max] = {22,16,80,1,10};
int time = 0;
int count = 0;
for (int i = 0; i < Max - 1 ; i++) {
for (int j = 0; j < (Max - 1 - i); j++) {
time++;
if (a[j] > a[j+1] ) {
int tmp;
tmp = a[j];
a[j] = a[j+1];
a[j+1] = tmp;
count++;
}
}
}
printf("交换次数%d\n",count);
printf("执行次数%d\n",time);
//遍历
for (int i = 0 ; i < Max; i++) {
printf("%d ",a[i]);
}
return 0;
}
Question :
1.我这已经是最优的了吧
2.第二个for循环的j条件,为什么要设置成 Max - i - 1 ,Max表示数组长度.
问题 2 的 每次排序,肯定会所最大 的数放到最尾部,所以第二次比较的时候,就不用对最后一位的数进行操作