#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表示数组长度.
Setiap kali anda mengisih dalam soalan 2, nombor terbesar pasti akan diletakkan di hujung, jadi semasa perbandingan kedua, tidak perlu beroperasi pada nombor terakhir
sudah diisih
Apa kejadahnyaMax - 1- i
Max - 1
Soalan 1: Terdapat satu lagi perkara yang boleh dioptimumkan dalam algoritma ini, iaitu pemprosesan jujukan yang telah dipesan, seperti {1, 2, 3, 5, 4}; gelung jika tiada pertukaran Tetapi saya tidak mempunyainya. Lengkapkan pengoptimuman kerana pengisihan gagal diselesaikan selepas ujian.
Soalan 2: Tetapan keadaan j: bergantung pada nilai i, kerana i telah diisih sebelum ini, dan elemen terakhir tatasusunan juga telah diisih.