基本思想:
比较相邻两个元素的大小,如果反序则交换,重复进行多轮比较,直到没有反序的元素为止。
如图所示:
采用冒泡排序的方法,将数组arr[ ] = { 2, 8, 10, 5, 19, 23, 1, 6, 4, 44, 99 }中的元素按照从大到小的顺序进行排列。
#include <stdio.h>
void BubbleSort(int* arr, int count) //将数组arr[count]中的数据按照从大到小的顺序排列
{
int end = count; // 需要进行循环的次数
while (end)
{
int flag = 0; // 用于记录数组是否已经有序,0 表示有序,1 表示无序
for (int i = 0; i < end - 1; i++) // 在每一轮循环中,使用for循环进行一次冒泡排序
{
if (arr[i] < arr[i + 1]) // 如果前一个元素比后一个元素小,则交换位置
{
int temp = arr[i];
arr[i] = arr[i + 1];
arr[i + 1] = temp;
flag = 1; //将flag标记为1,表示数组无序
}
}
if (flag == 0) // 如果数组已经有序,则直接结束循环
{
break;
}
end--; // 每轮排序后,循环次数减1
}
}
int main()
{
int arr[] = { 2, 8, 10, 5, 19, 23, 1, 6, 4, 44, 99 };
int count = sizeof(arr) / sizeof(int); // 数组元素个数
BubbleSort(arr, count);
for (int i = 0; i < count; i++) {
printf("%d ", arr[i]);
}
printf("\n");
return 0;
}