#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梦2017-05-02 09:25:04
1. 벌써부터 나에겐 최고죠
아니요
2. 두 번째 for 루프의 j 조건을 Max - i - 1로 설정해야 하는 이유는 무엇입니까? Max는 배열의 길이를 나타냅니다.
Max - 1- i
부터 Max - 1
까지 이미 정렬되어 있습니다
objectiv-c
대체
巴扎黑2017-05-02 09:25:04
질문 1: 이 알고리즘에서 최적화할 수 있는 또 다른 점이 있는데, 바로 {1, 2, 3, 5, 4};와 같이 이미 정렬된 시퀀스를 처리하는 것입니다. 교환이 없으면 루프가 발생합니다. 그러나 테스트 후 정렬이 완료되지 않았으므로 최적화를 완료하십시오.
질문 2: j 조건 설정: i 값에 따라 달라집니다. 왜냐하면 i가 이전에 정렬되었고 배열의 마지막 요소도 정렬되었기 때문입니다.