Menu
Coddy logo textTech

Adaptivity

Coddyの「バブルソート」コースのレッスン 6/11。

バブルソートアルゴリズムの時間計算量について説明しました。それは O(n2) です。しかし、配列がすでにソートされている場合はどうなるでしょうか?その場合でも、実行時間は O(n2) かかります。 

アダプティビティ(適応性)とは何でしょうか?

アダプティブアルゴリズムとは、与えられた入力シーケンスに応じて動作を変化させるアルゴリズムのことです。

では、バブルソートはアダプティブなのでしょうか?

はい、バブルソートアルゴリズムをアダプティブにすることができます。アダプティブにするためには、バブルソートアルゴリズムを、最悪の場合の実行時間が O(n2)最良の場合O(n) となるように記述する必要があります。ここで、最良の場合とは、配列がすでにソートされている場合を指します。

boolean型のフラグ変数を使用してwhileループを制御し、すでにソートされている場合にアルゴリズムが早期に終了するようにします。

 

while(flag)

{

    //code

}

 

配列がソートされるまでパスを繰り返す必要があります。スワップの回数をカウントする方法はすでに学習したので、フラグを実装して、パス内でスワップが必要ないかどうかを確認し、ループを抜けることができます。 

 

challenge icon

チャレンジ

中級

配列とそのサイズを受け取る、ad_bubblesortという名前の関数を作成してください。アダプティブ・バブルソート(適応型バブルソート)アルゴリズムを実行します。スワップが発生したかどうかを確認するために、flagという名前の変数を使用することを忘れないでください。

自分で試してみよう

#include <stdio.h>
#include <stdlib.h>

int* ad_bubblesort(int* arr, int arr_size, int n, int* returnSize) {
    // ここにコードを書いてください
    *returnSize = n;
    return arr;
}

バブルソートのすべてのレッスン