什么是冒泡排序?
冒泡排序是一种简单的排序算法,其基本思想是通过比较相邻的元素,并根据需要交换它们的位置,从而将最大(或最小)的元素逐渐"冒泡"到数组的一端。在每一轮遍历中,最大(或最小)的元素都会"冒泡"到数组的末尾,因此称为冒泡排序。
冒泡排序的步骤
1、从数组的第一个元素开始,依次比较相邻的两个元素。
2、如果第一个元素大于第二个元素,则交换它们的位置,使较大的元素排在后面。
3、继续比较下一对相邻元素,重复步骤2。
4、重复遍历数组,每次遍历将最大的元素"冒泡"到末尾。
5、重复步骤1~4,直到所有元素都按照顺序排列。
关键
冒泡排序的关键点是内外两层循环。外层循环控制遍历的次数,内层循环负责比较相邻元素并交换位置。经过一次完整的遍历,最大(或最小)的元素就会"冒泡"到末尾。重复进行多次遍历,直到所有元素都被排序。
示例代码
c
#include <stdio.h>
void BubbleSort(int arr[], int length);
int main()
{
int arr[5] = {5, 3, 8, 4, 2};
/*
不可以放在函数内部,
当数组作为函数参数传递给函数时,
数组参数会被转换为指针类型,
因此在函数内部无法通过sizeof操作符获取数组的长度。
*/
int length = sizeof(arr) / sizeof(arr[0]);
BubbleSort(arr, length);
return 0;
}
void BubbleSort(int arr[], int length)
{
int i, j, k;
for (i = 0; i < length; i++)
{
for (j = 0; j < length - 1 - i; j++)
{
if (arr[j + 1] < arr[j])
{
int temp = arr[j + 1];
arr[j + 1] = arr[j];
arr[j] = temp;
}
}
}
for (k = 0; k < length; k++)
{
printf("%d ", arr[k]);
}
}