十大经典排序算法——冒泡排序(1)

十大经典排序算法——冒泡排序(1)

冒泡排序(Bubble Sort)是一种简单的排序算法,它通过重复地遍历待排序的列表,比较相邻的元素并交换它们的位置来实现排序。该算法的名称来源于较小的元素会像"气泡"一样逐渐"浮"到列表的顶端。

1. 算法步骤

  1. 比较相邻元素:从列表的第一个元素开始,比较相邻的两个元素。
  2. 交换位置:如果前一个元素比后一个元素大,则交换它们的位置。
  3. 重复遍历:对列表中的每一对相邻元素重复上述步骤,直到列表的末尾。这样,最大的元素会被"冒泡"到列表的最后。
  4. 缩小范围:忽略已经排序好的最后一个元素,重复上述步骤,直到整个列表排序完成。

2. 动图演示

img

假设有一个待排序的列表 [5, 3, 8, 4, 6],冒泡排序的过程如下:

  1. 第一轮遍历
    • 比较 5 和 3,交换位置,列表变为 [3, 5, 8, 4, 6]
    • 比较 5 和 8,不交换。
    • 比较 8 和 4,交换位置,列表变为 [3, 5, 4, 8, 6]
    • 比较 8 和 6,交换位置,列表变为 [3, 5, 4, 6, 8]
    • 第一轮结束后,最大的元素 8 已经"冒泡"到列表的最后。
  2. 第二轮遍历
    • 比较 3 和 5,不交换。
    • 比较 5 和 4,交换位置,列表变为 [3, 4, 5, 6, 8]
    • 比较 5 和 6,不交换。
    • 第二轮结束后,第二大的元素 6 已经"冒泡"到列表的倒数第二位置。
  3. 第三轮遍历
    • 比较 3 和 4,不交换。
    • 比较 4 和 5,不交换。
    • 第三轮结束后,列表已经有序。
  4. 第四轮遍历
    • 比较 3 和 4,不交换。
    • 列表已经完全有序。
#include <stdio.h>

void bubble_sort(int arr[], int len)
{
	int i, j, temp;
	for (i = 0;i < len - 1;i++)
	{
		for (j = 0;j < len - 1- i;j++)
		{
			if (arr[j] > arr[j + 1])
			{
				temp = arr[j];
				arr[j] = arr[j + 1];
				arr[j + 1] = temp;
			}
		}
	}
}

int main()
{
	int arr[] = { 22,34,3,32,82,55,89,50,37,5,64,35,9,70 };
	int len = sizeof(arr) / sizeof(arr[0]);
	bubble_sort(arr, len);
	int i;
	for (i = 0; i < len; i++)
	{
		printf("%d ",arr[i]);
	}
	return 0;
}

posted @ 2026-03-29 23:39  Q&25  阅读(2)  评论(0)    收藏  举报