Isih gelembung bahasa C
黄舟
黄舟 2017-05-02 09:23:04
0
3
553

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

黄舟
黄舟

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

membalas semua(3)
巴扎黑

Setiap kali anda mengisih dalam soalan 2, nombor terbesar pasti akan diletakkan di hujung, jadi semasa perbandingan kedua, tidak perlu beroperasi pada nombor terakhir

过去多啦不再A梦

1. Ini sudah yang terbaik untuk saya, bukan?

Tidak

2. Mengapakah keadaan j bagi gelung kedua harus ditetapkan kepada Maks - i - 1 Maks mewakili panjang tatasusunan.

Dari
hingga

sudah diisihMax - 1- i Max - 1

Apa kejadahnya

巴扎黑

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.

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan