버블 정렬 알고리즘의 C 언어 구현

버블정렬(Bubble Sort)의 영문명은 Bubble Sort이며, 가장 기본적인 교환정렬 방법이다.

버블 정렬은 간단한 정렬 알고리즘이면서 안정적인 정렬 알고리즘입니다. 구현 원리는 정렬할 순서를 반복적으로 스캔하고 인접한 요소의 각 쌍을 비교하여 쌍의 순서가 올바르지 않을 경우 요소를 교환하는 것입니다. 이 프로세스는 인접한 두 요소를 교환할 수 없을 때까지 반복되어 정렬이 완료되었음을 나타냅니다.

일반적으로 정렬 알고리즘을 안정적이라고 부르는 것은 정렬할 시퀀스에 동일한 요소가 있을 때 해당 요소의 상대적 위치가 정렬 전후에 변경되지 않음을 의미합니다.

정렬할 순서가 (5,1,4,2,8)이라고 가정하고, 버블정렬을 이용하여 오름차순(작은 것부터 큰 것까지)으로 정렬한다면 전체 정렬 과정은 다음과 같다. :
1) 첫 번째 정렬. 이때 전체 시퀀스의 요소는 정렬할 시퀀스에 위치하며 인접한 요소의 각 쌍을 차례로 스캔하여 위치를 결정합니다. 순서가 잘못된 요소 쌍 중 일부를 교체하며 전체 과정은 다음과 같습니다.

보시다시피 1차 버블 정렬 이후 정렬 대상 시퀀스에서 최대 개수인 8을 찾아 정렬 대상 시퀀스의 마지막에 배치하고 정렬된 시퀀스에 병합했습니다.

2) 두 번째 정렬 이때 정렬 대상 시퀀스에는 처음 4개의 요소만 포함되어 있으며 인접한 요소의 각 쌍을 차례로 스캔하여 요소의 위치가 잘못되었습니다. 주문이 교환됩니다.전체 과정은 아래 그림과 같습니다.

보시다시피, 2차 버블 정렬 이후 정렬 대상 시퀀스에서 최대 개수인 5를 찾아 정렬 대상 시퀀스의 마지막에 배치하여 정렬된 시퀀스에 병합하였습니다.

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
두 번째 버블 정렬 결과: 15 3 21 36 -13 45 -10 -2 67 99
세 번째 버블 정렬 결과: 3 15 21 -13 36 -10 -2 45 67 99
네 번째 라운드 버블 정렬 정렬 결과: 3 15 -13 21 -10 -2 36 45 67 99
다섯 번째 버블 정렬 결과: 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