バブルソートアルゴリズムのC言語実装

バブルソートの英語名はBubble Sortといい、最も基本的な交換ソート手法です。

バブル ソートは単純な並べ替えアルゴリズムであると同時に、安定した並べ替えアルゴリズムでもあります。実装原理は、並べ替えるシーケンスを繰り返しスキャンし、隣接する要素の各ペアを比較し、ペアの順序が正しくない場合に要素を交換することです。このプロセスは、並べ替えが完了したことを示す、隣接する 2 つの要素が交換できなくなるまで繰り返されます。

一般に、ソート アルゴリズムが安定しているということは、ソート対象のシーケンス内に同じ要素が存在する場合、それらの相対位置がソートの前後で変わらないことを意味します。

ソートするシーケンスが (5,1,4,2,8) であると仮定します。バブル ソートを使用して昇順 (小さいものから大きいものへ) にソートすると、ソート プロセス全体は次のようになります。 :
1) ソートの最初のラウンド. この時点で、シーケンス全体の要素はソートされるシーケンス内に配置されます. 隣接する要素の各ペアが順番にスキャンされ、その位置が順序が間違っている要素ペアが交換される全体のプロセスは次のようになります。

ご覧のとおり、バブル ソートの最初のラウンドの後、最大の数値 8 がソート対象のシーケンスから検出され、ソート対象のシーケンスの最後に配置され、ソート済みのシーケンスにマージされています。

2) 2 回目の並べ替え。この時点で、並べ替えられるシーケンスには最初の 4 つの要素のみが含まれます。隣接する要素の各ペアが順番にスキャンされ、要素の位置が不正確になります。全体の流れは以下の通りです。

ご覧のとおり、バブル ソートの 2 回目のラウンドの後、最大の数値 5 がソート対象のシーケンスから検出され、ソート対象のシーケンスの最後に配置され、ソート済みのシーケンスにマージされています。

3) 3 回目のソート。この時点で、ソート対象のシーケンスには最初の 3 つの要素が含まれています。隣接する要素の各ペアが順番にスキャンされ、要素の位置が間違った順序になります。全体の流れは下図の通りです。

このラウンドのバブル ソートの後、最大の数値 4 がソート対象のシーケンスから検出され、ソート対象のシーケンスの最後に配置され、ソート済みのシーケンスにマージされます。

4) 4 回目のソート このとき、ソート対象のシーケンスには最初の 2 つの要素が含まれます。バブル ソートの全体的なプロセスは次の図に示されています。

このラウンドのバブル ソートの後、最大数 2 がソート対象のシーケンスから検出され、ソート対象のシーケンスの最後に配置され、ソート済みのシーケンスにマージされます。

5) 5 回目のバブルソートを実行すると、ソート対象のシーケンスに要素が 1 つしか残っていないため、隣接する要素がどのように比較されても、ソートされたシーケンスに直接マージされます。 . 、この時点のシーケンスはソートされたシーケンスとみなされます (下図に示すように)。

バブルソートアルゴリズムの実装コードは以下のとおりです(C言語)。

//冒泡排序算法的简单实现
#include <stdio.h>
int main()
{
	int a[10] = { 21,15,36,3,45,67,-13,99,-10,-2 };
	int n = sizeof(a) / sizeof(a[0]);
	for (int i = 0; i < n - 1; i++)		//比较的轮数
	{
		for (int j = 0; j < n - 1 - i; j++)		// 每一轮需要比较的次数
		{
			if (a[j] > a[j + 1])		//比较相邻数组元素的大小,顺序不对即交换
			{
				int tmp = a[j + 1];
				a[j + 1] = a[j];
				a[j] = tmp;
			}
		}
		//输出本轮冒泡排序之后的序列
		printf("第%d轮冒泡排序结果: ", i + 1);
		for (int loop = 0; loop < n; loop++)
		{
			printf("%d ", a[loop]);
		}
		printf("\n");
	}
	return 0;
}

実行結果は以下の通りです

バブル ソートの最初のラウンドの結果: 15 21 3 36 45 -13 67 -10 -2 99
バブル ソートの 2 番目のラウンドの結果: 15 3 21 36 -13 45 -10 -2 67 99
バブル ソートの第 3 ラウンドの結果: 3 15 21 -13 36 -10 -2 45 67 99
第 4 ラウンドバブルソートの結果 ソート結果: 3 15 -13 21 -10 -2 36 45 67 99
バブルソートの 5 回目の結果: 3 -13 15 -10 -2 21 36 45 67 99< /span> バブル ソートの 8 ラウンドの結果: -13 -10 -2 3 15 21 36 45 67 99 7 ラウンドのバブル ソートの結果: -13 -10 -2 3 15 21 36 45 67 99
6 ラウンドのバブル ソートの結果: -13 3 -10 -2 15 21 36 45 67 99


バブルソートの実装コードを分析すると、次のことがわかります。

このアルゴリズムの最悪の時間計算量はO(n2)、最適な時間計算量はO(n)、平均の時間計算量は < a i =3>。 O(n2)

おすすめ

転載: blog.csdn.net/GYN_enyaer/article/details/125946918