前一个比后一个如果 前比后大则交换 不大则不交换
#include<stdio.h>
// 冒泡排序函数,输入参数是一个整数数组 arr 和数组长度 len
void bubblesort(int arr[], int len)
{
int temp;
// 外层循环控制排序的轮数,每一轮都能确定一个最大值或最小值的位置
for (int i = 0; i < len - 1; i++)
{
// 内层循环控制每一轮中比较的次数,将相邻的两个数进行比较,把较大或较小的数交换位置
for (int j = 0; j < len - 1 - i; j++)
{
temp = arr[j];
if (arr[j] > arr[j + 1])
{
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
}
int main(void)
{
int arr[] = { 12, 54, 23, 11, 10, 2, 6, 58, 74, 5 };
int len = sizeof(arr) / sizeof(arr[0]);
// 调用冒泡排序函数对数组进行排序
bubblesort(arr, len);
// 打印排序后的数组
for (int i = 0; i < len; i++)
{
printf("%d ", arr[i]);
}
return 0;
}
当然还有一种进阶版 当数组顺序是已经从大到小排序好后 这种方法效率太低 所以进行改进
因为循环一次过后就已经是最大不需要再次循环
#include<stdio.h>
void bubblesortplus(int arr[], int len)
{
int temp;
while (len--)
{
for (int i = 0; i < len ; i++)
{
temp = arr[i];
if (arr[i] > arr[i + 1])
{
arr[i] = arr[i + 1];
arr[ i+ 1] = temp;
}
}
}
}
int main(void)
{
int arr[] = { 12,54,23,11,10,2,6,58,74,5 };
int len = sizeof(arr) / sizeof(arr[0]);
bubblesortplus(arr, len);
for (int i = 0; i < len; i++)
{
printf("%d ", arr[i]);
}
return 0;
}