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

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

黄舟
黄舟

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

全員に返信(3)
巴扎黑

質問 2 で並べ替えるたびに、最大の数字が必ず最後に配置されるため、2 回目の比較では最後の数字を操作する必要はありません

いいねを押す +0
过去多啦不再A梦

1.これはもう最高ですか?

ではありません

2. 2 番目の for ループの j 条件を Max - i - 1 に設定する必要があるのはなぜですか? Max は配列の長さを表します。

Max - 1- i から Max - 1 まではすでにソートされています

objectiv-c とは一体何ですかMax - 1- iMax - 1是已经排好序的

objectiv-c

いいねを押す +0
巴扎黑

質問 1: このアルゴリズムで最適化できるもう 1 つのポイントは、{1, 2, 3, 5, 4} などの既に順序付けされたシーケンスの処理です。処理方法はループから飛び出すことです。ただし、テスト後にソートが完了しなかったため、最適化が完了していません。
質問 2: j 条件の設定: i は以前にソートされており、配列の最後の要素もソートされているため、i の値に依存します。

いいねを押す +0
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート