찾다

 >  Q&A  >  본문

objective-c - C语言冒泡排序

#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表示数组长度.

黄舟黄舟2758일 전533

모든 응답(3)나는 대답할 것이다

  • 巴扎黑

    巴扎黑2017-05-02 09:25:04

    2번 문제를 정렬할 때마다 반드시 가장 큰 숫자가 맨 뒤에 오므로 두 번째 비교에서는 마지막 숫자에 연산을 할 필요가 없습니다

    회신하다
    0
  • 过去多啦不再A梦

    过去多啦不再A梦2017-05-02 09:25:04

    1. 벌써부터 나에겐 최고죠

    아니요

    2. 두 번째 for 루프의 j 조건을 Max - i - 1로 설정해야 하는 이유는 무엇입니까? Max는 배열의 길이를 나타냅니다.

    Max - 1- i부터 Max - 1까지 이미 정렬되어 있습니다

    objectiv-c대체

    회신하다
    0
  • 巴扎黑

    巴扎黑2017-05-02 09:25:04

    질문 1: 이 알고리즘에서 최적화할 수 있는 또 다른 점이 있는데, 바로 {1, 2, 3, 5, 4};와 같이 이미 정렬된 시퀀스를 처리하는 것입니다. 교환이 없으면 루프가 발생합니다. 그러나 테스트 후 정렬이 완료되지 않았으므로 최적화를 완료하십시오.
    질문 2: j 조건 설정: i 값에 따라 달라집니다. 왜냐하면 i가 이전에 정렬되었고 배열의 마지막 요소도 정렬되었기 때문입니다.

    회신하다
    0
  • 취소회신하다