cari

Rumah  >  Soal Jawab  >  teks badan

Isih gelembung bahasa 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表示数组长度.

黄舟黄舟2835 hari yang lalu561

membalas semua(3)saya akan balas

  • 巴扎黑

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

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

    balas
    0
  • 过去多啦不再A梦

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

    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

    balas
    0
  • 巴扎黑

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

    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.

    balas
    0
  • Batalbalas