目录
一 什么是冒泡?
假定我们要对 9 8 7 6 5 4 3 2 1 0 这十个数字进行排序
2 使用 输入十个整数 对这组数据进行排序(冒泡)
#include<stdio.h>
void bubble_sort(int arr[10], int sz)
// 如果是 int arr 那就是传入一个int 类型的普通变量
// int arr[10] 就是传入一个数组
//这里的arr 本质是指针 指针就是地址
//void bubble_sort(int *arr, int sz)也可以这样写
{
int i = 0;// 如果在这里使用sizeof(arr)/sizeof(arr[0]) 求元素个数是不行的 因为传过来的是首元素地址 按照32位编译方式 一个指针占四个字节 4/4 = 1;
for (i = 0; i < sz - 1; i++)// 每一趟都要比较 0 1 2 3 4 5 6 7 8 一共九趟
{
int j = 0;
for (j = 0; j < sz - 1 - i; j++)
{
if (arr[j] > arr[j + 1])//比较一趟的数字
{
int tmp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = tmp;
}
}
}
}
int main()
{
int arr[10] = { 0 };
int i = 0;
int sz = sizeof(arr) / sizeof(arr[0]);
for (i = 0; i< 10; i++)
{
scanf("%d", &arr[i]);
}
//arr作为数组传参
//数组传参传的是地址 并且是首元素的地址
bubble_sort(arr,sz);//arr 是首元素的地址
for (i = 0; i < 10; i++)
{
printf("%d ", arr[i]);
}
return 0;
}
但是我们仔细想想 如果我们在其中某一趟的时候 就已经排好顺序了 但是上面的代码依然还在跑 还在比较 就比较繁琐 所以我们可以改进一下
//还可以改进一下 当已经排好了就不要排了
#include<stdio.h>
void bubble_sort(int arr[10], int sz)
{
int i = 0;
for (i = 0; i < sz - 1; i++)
{
int j = 0;
int flag = 1;
//假设每一趟有序的时候flag = 1
for (j = 0; j < sz - 1 - i; j++)
{
if (arr[j] > arr[j + 1])
{
int tmp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = tmp;
flag = 0;
}
}
if (1 == flag)
break;
}
}
int main()
{
int arr[10] = { 0 };
int i = 0;
int sz = sizeof(arr) / sizeof(arr[0]);
for (i = 0; i < 10; i++)
{
scanf("%d", &arr[i]);
}
bubble_sort(arr, sz);
for (i = 0; i < 10; i++)
{
printf("%d ", arr[i]);
}
return 0;
}
自己第一次接触到的一个很基础的算法 继续加油