算法思路:从后往前(或从前后往)两两比较相邻元素的值,若为逆序,则交换他们,直到序列比较完,称这样为“一趟”冒泡排序,重复排序,直到最后一个元素(或最前一个元素)。
空间复杂度:O(1)。
时间复杂度:O(n^2)。
算法稳定性:稳定。
适用性:可用于顺序表和链表。
实现代码:
#include <stdio.h> // 输入输出
#include <windows.h> // system函数
#define MaxSizeC 5
// 冒泡排序
void BubbleSort(int *arr, int n)
{
int i, j, temp;
for (i = 0; i < n; i++)
{
BOOL flag = FALSE; // 标记位,表示本趟冒泡是否有元素交换,若一趟冒泡没有发生元素交换,则可以直接结束循环。
for (j = n - 1; j > i; j--)
{
// 前面的元素比后面的大,则交互位置,从后往前冒
if (arr[j - 1] > arr[j])
{
temp = arr[j];
arr[j] = arr[j - 1];
arr[j - 1] = temp;
flag = TRUE;
}
}
if (flag == FALSE)
{
break;
}
}
}
// 打印
void PrintList(int *A, int n)
{
int i;
for (i = 0; i < n; i++)
{
printf("%d", A[i]);
printf("\n");
}
}
int main()
{
int C[MaxSizeC] = {87, 75, 66, 52, 14};
// 冒泡排序
BubbleSort(C, MaxSizeC);
PrintList(C, MaxSizeC);
printf("\n");
system("pause"); // 避免exe程序自动退出
return 0;
}