一、概述
冒泡排序是一种简单的排序算法。它重复地遍历要排序的列表,一次比较两个元素,并按照顺序交换它们,直到整个列表排序完成。
二、冒泡排序的过程
- 首先,将待排序的列表按照原始顺序进行展示。
- 从列表的第一个元素开始,依次比较相邻的两个元素。如果前一个元素大于后一个元素,则交换它们的位置。 就像水中的泡泡一样,大的泡泡会慢慢浮出水面,所以称为冒泡排序。
- 继续进行相邻元素的比较和交换,直到整个列表的末尾。
- 一次完整的遍历将会将列表中最大的元素移动到最后一个位置。
- 重复步骤2至4,直到整个列表排序完成。
三、过程图解
- 第一个元素的排序过程如下:
四、代码实现
- 下面是用C语言实现冒泡排序的代码示例:
c
#include <stdio.h>
void Bubble_Sort(int arr[], int sz)
{
for (int i = 0; i < sz - 1; i++)
{
for (int j = 0; j < sz - i - 1; j++)
{
if (arr[j] > arr[j + 1])
{
// 交换arr[j]和arr[j+1]
int temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
}
void Print_Array(int arr[], int sz)
{
for (int i = 0; i < sz; i++)
{
printf("%d ", arr[i]);
}
printf("\n");
}
int main()
{
int arr[] = { 64, 34, 25, 12, 22, 11, 90 };
int sz = sizeof(arr) / sizeof(arr[0]);//计算数组中的元素个数
printf("原始数组:");
Print_Array(arr, sz);
Bubble_Sort(arr, sz);
printf("排序后的数组:");
Print_Array(arr, sz);
return 0;
}
运行结果:
原始数组:64 34 25 12 22 11 90
排序后的数组:11 12 22 25 34 64 90
在冒泡排序中,外层循环控制排序的轮数,内层循环用于比较并交换相邻的元素。通过多次执行内层循环,最大的元素会逐渐"冒泡"到数组的末尾,从而实现排序。
值得注意的是,冒泡排序的时间复杂度是O(n^2),没有使用额外的空间,是一种原地排序算法。