#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表示数组长度.
A chaque fois que vous trierez dans la question 2, le plus grand nombre sera définitivement placé à la fin, donc lors de la deuxième comparaison, il n'y a pas besoin d'opérer sur le dernier nombre
sont déjà triés
C'est quoi ce bordelMax - 1- i
Max - 1
Question 1 : Il y a un autre point qui peut être optimisé dans cet algorithme, qui est le traitement de séquences déjà ordonnées, telles que {1, 2, 3, 5, 4} ;. la boucle s'il n'y a pas d'échange. Mais je ne l'ai pas Terminer l'optimisation car le tri n'a pas pu être effectué après le test.
Question 2 : Le réglage de la condition j : dépend de la valeur de i, car i a déjà été trié, et le dernier élément du tableau a également été trié.