objective-c - C语言冒泡排序
黄舟
黄舟 2017-05-02 09:23:04
0
3
527

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

黄舟
黄舟

人生最曼妙的风景,竟是内心的淡定与从容!

répondre à tous(3)
巴扎黑

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

过去多啦不再A梦

1. C'est déjà le meilleur pour moi, non ?

Non

2. Pourquoi la condition j de la seconde boucle for doit-elle être définie sur Max - i - 1 ? Max représente la longueur du tableau.

De
à

sont déjà triésMax - 1- i Max - 1

C'est quoi ce bordel

巴扎黑

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é.

Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal