bubble sort c with examples
C ++でのバブルソート手法。
バブルソートは、最も単純なソート手法です。
バブルソート手法では、リスト内の各要素が隣接する要素と比較されます。したがって、リストAにn個の要素がある場合、A [0]はA [1]と比較され、A [1]はA [2]と比較されます。
最初の要素が2番目の要素より大きいかどうかを比較した後、2つの要素が交換されます。
=> 専門家による完全なC ++コースについては、こちらをご覧ください。
学習内容:
UNIXシェルスクリプトのインタビューの質問の回答と説明pdf
バブルソートテクニック
バブルソート手法を使用して、ソートはパスまたは反復で行われます。したがって、各反復の終わりに、最も重い要素がリスト内の適切な場所に配置されます。つまり、リストの最大の要素がバブルアップします。
以下に、バブルソート手法の一般的なアルゴリズムを示します。
一般的なアルゴリズム
ステップ1 :i = 0からN-1の場合、ステップ2を繰り返します。
ステップ2 :J = i +1からNの場合–繰り返します
ステップ3 :A [J]> A [i]の場合
A [J]とA [i]を交換します
[内部forループの終わり]
[Outerforループの場合は終了]
ステップ4 : 出口
これは、バブルソートアルゴリズムの擬似コードです。ここでは、2つの反復ループを使用してリストをトラバースします。
最初のループでは、0から開始しますth要素と次のループでは、隣接する要素から開始します。内側のループ本体では、隣接する各要素を比較し、順序が正しくない場合は交換します。外側のループの各反復の終わりに、最も重い要素が最後に泡立ちます。
擬似コード
Procedure bubble_sort (array , N) array – list of items to be sorted N – size of array begin swapped = false repeat for I = 1 to N-1 if array[i-1] > array[i] then swap array[i-1] and array[i] swapped = true end if end for until not swapped end procedure
上記は、バブルソート手法の擬似コードです。ここで、詳細な図を使用してこの手法を説明しましょう。
図
サイズ5の配列を取り、バブルソートアルゴリズムを示します。
配列は完全にソートされています。
上記の図は、以下に示すように表形式で要約できます。
パス | ソートされていないリスト | 比較 | ソート済みリスト |
---|---|---|---|
{5,0,10,12,15} | {10.12} | {5,0,10,12,15} | |
1 | {10,5,15,0,12} | {10.5} | {5,10,15,0,12} |
{5,10,15,0,12} | {10.15} | {5,10,15,0,12} | |
{5,10,15,0,12} | {15.0} | {5,10,0,15,12} | |
{5,10,0,15,12} | {15.12} | {5,10,0,12,15} | |
二 | {5,10,0,12,15} | {5,10} | {5,10,0,12,15} |
{5,10,0,12,15} | {10.0} | {5,0,10,12,15} | |
3 | {5,0,10,12,15} | {5,0} | {0,5,10,12,15} |
{5,0,10,12,15} | {5,10} | {5,0,10,12,15} | |
{5,0,10,12,15} | ソート済み |
図に示すように、パスごとに、最大の要素が最後までバブルし、パスごとにリストが並べ替えられます。冒頭で述べたように、各要素は隣接する要素と比較され、順序が正しくない場合は相互に交換されます。
したがって、上の図に示すように、最初のパスの最後で、配列を昇順で並べ替える場合、最大の要素がリストの最後に配置されます。 2番目のパスでは、2番目に大きい要素がリストの最後から2番目の位置に配置されます。
N-1(Nはリスト内の要素の総数)パスに達すると、リスト全体がソートされます。
mp3音楽ダウンロード無料トップアプリ
バブルソート手法は、任意のプログラミング言語で実装できます。以下のC ++とJava言語を使用してバブルソートアルゴリズムを実装しました。
C ++の例
バブルソートを示すプログラミング例を見てみましょう。
#include using namespace std; int main () { int i, j,temp,pass=0; int a[10] = {10,2,0,14,43,25,18,1,5,45}; cout <<'Input list ...
'; for(i = 0; i<10; i++) { cout < 出力:
入力リスト…
10 2 0 14 43 25 18 1 5 45
ソートされた要素リスト…
0 1 2 5 10 14 18 25 43 45
リストをソートするために取られたパスの数:10
Javaの例
class Main { public static void main(String[] args) { int pass = 0; int[] a = {10,-2,0,14,43,25,18,1,5,45}; System.out.println('Input List...'); for(int i=0;i<10;i++) { System.out.print(a[i] + ' '); } for(int i=0;i<10;i++) { for (int j=0;j<10;j++) { if(a[i] 出力:
どちらのプログラムでも、10個の要素の配列を使用し、バブルソート手法を使用してソートしました。どちらのプログラムでも、2つのforループを使用して、配列の隣接する要素を反復処理しました。
各パス(外部ループ)の終わりに、配列内の最大の要素が配列の終わりまでバブルアップされます。また、配列全体をソートするために必要なパスの数もカウントします。
バブルソートアルゴリズムの複雑さの分析
上記の擬似コードと図から、バブルソートでは、最初のパスでN-1の比較を行い、2番目のパスでN-2の比較を行います。
したがって、バブルソートでの比較の総数は次のとおりです。
I =(n-1)+(n-2)+(n-3)+ ... + 3 + 2 + 1
= N(N-1)/ 2
= O(n二)=>バブルソート手法の時間計算量
したがって、バブルソート手法のさまざまな複雑さを以下に示します。
Mac用の最高のビデオコンバーター
最悪の場合の時間計算量 O(n 2) ベストケースの時間計算量 オン) 平均時間計算量 O(n 2) スペースの複雑さ O(1)
バブルソート手法では、スワッピングを容易にするために、一時変数用に1つの追加メモリスペースのみが必要です。したがって、バブルソートアルゴリズムのスペースの複雑さはO(1)です。
バブルソート手法の最良の時間計算量は、リストがすでにソートされている場合であり、それはO(n)になることに注意してください。
結論
バブルソートの主な利点は、アルゴリズムが単純なことです。バブルソートでは、パスごとに、配列が昇順でソートされている場合、最大の要素がリストの最後までバブルします。
同様に、リストを降順で並べ替える場合、最小の要素はすべてのパスの最後の適切な場所に配置されます。
ソート手法は最も単純で実装が簡単であるため、通常、バブルソートはオーディエンスにソートを導入するために使用されます。第二に、バブルソートはコンピュータグラフィックスのようなアプリケーションでも使用され、ポリゴンのエッジなどを塗りつぶすには、ポリゴンの内側にある頂点をソートするためにバブルソートが必要です。
次のチュートリアルでは、選択ソートについて詳しく学習します。
=> ゼロからC ++を学ぶには、ここにアクセスしてください。
推奨読書