Python
 Computer >> コンピューター >  >> プログラミング >> Python

Pythonのバブルソートとは何ですか?例を挙げて説明しますか?


バブルソートは、リストを昇順(または降順)にソートするためのソートアルゴリズムです。これは最も簡単な並べ替えアルゴリズムですが、あまり効率的ではありません。小さい入力サイズで使用できますが、長さが長いリストや配列では時間効率が良くありません。その時間計算量はO(n ^ 2)です。ただし、これはインプレース並べ替えアルゴリズムであるため、余分なスペースは使用されません。したがって、スペースの複雑さの点で効率的です。ただし、バブルソートよりも優れたソートアルゴリズムがあるため、あまり使用されません。

バブルソートはどのように機能しますか?

バブルソートでは、2つのforループが使用されます。外側のforループは、リストを繰り返し処理します。内側のforループも、すべての外側のループ反復のリストを反復処理します。

バブルソートの主な操作は、2つの連続する要素を比較することです。最初の要素が次の要素よりも大きい場合は、両方を交換して、小さい方の要素が先に進み、大きい方の要素が戻るようにします。外側のループを1回繰り返すと、リストの最大の要素が最後のインデックスに移動します。外側のループの2回目の反復では、リストの2番目に大きい要素が最後から2番目のインデックスに移動します。したがって、すべての反復の最後にソートされたリストを取得します。

例を参考にして理解を深めることができます。

次のリストを並べ替える必要があります。

5 2 1 3 4

外部ループ=1

5 2 1 3 4

5> 2、したがって両方を交換します

2 5 1 3 4

5> 1、したがって両方を交換します

2 1 5 3 4

5> 3、したがって両方を交換します

2 1 3 5 4

5> 4、したがって両方を交換します

2 1 3 5 4

(最大の要素5は、最初の外部反復後の最後のインデックスに到達しました)

外部ループ=2

2 1 3 5 4

2> 1、したがってスワップ

1 2 3 5 4

交換は必要ありません

1 2 3 4 5

交換は必要ありません

1 2 3 4 5

ご覧のとおり、リストは2番目の外側の反復自体でソートされています。ただし、外側のループはさらに3回繰り返され、それ以上のスワップ操作は行われません。したがって、この例では2回の反復のみが示されています。場合によっては、リストは最初の反復自体でソートできます。場合によっては、最後の反復でリストがソートされることがあります。したがって、外側のループは常にn回繰り返されます。

def bubble_sort(arr):
   for i in range(len(arr)):
      for j in range(len(arr)-1):
         if(arr[j]>arr[j+1]):
            temp=arr[j]
            arr[j]=arr[j+1]
            arr[j+1]=temp
   return arr
array=[2,3,1,5,4]
print(bubble_sort(array))

出力

[1, 2, 3, 4, 5]

  1. JavaScriptで配列をスプライシングするとはどういう意味ですか?例を挙げて説明する

    配列のスプライスとは、Array.splice()メソッドを使用して、配列にアイテムを追加または配列から削除することを意味します。削除されたアイテムは配列として返されます。 以下は、JavaScriptで配列をスプライスするためのコードです- 例 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8" /> <meta name="viewport" content="width=device-widt

  2. イメージアレイとは何ですか? C++の例で説明する

    配列は、データのコレクションを格納および取得するための便利な方法です。 OpenCVでは、この概念を使用して、画像配列に複数の画像を読み込み、配列のインデックス番号を使用してそれらを表示できます。 次のプログラムは、マトリックス配列に複数の画像をロードし、インデックス番号で呼び出される配列の画像を表示します。 例 #include<iostream> #include<opencv2/highgui/highgui.hpp> using namespace cv; using namespace std; int main(int argc,const char**