冒泡法详解
什么是冒泡法
冒泡排序(Bubble Sort),是一种计算机科学领域的较简单的排序算法。
这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端(升序或降序排列),就如同碳酸饮料中二氧化碳的气泡最终会上浮到顶端一样,故名“冒泡排序”。
冒泡法思路
- 冒泡排序就是把小的元素往前调或者把大的元素往后调,比较相邻的元素, 如果第一个比第二个大,就交换他们两个,直到到数组的末尾,每一个数从左到右都进行这样重复的程序,直到最后所有的元素都回到他们本来的位置
总结:两两想邻元素进行比较,需要时进行交换
例子:假如升序排列一组数字:9 8 7 6 5 4 3 2 1
第一次排序
剩下待排序的数字
第二次排序
剩余待排序数字
以此类推,最后升序排列
总结:一次冒泡排序复原一个数字,使其回到最终该回到的位置
我们可以看出,10个数字最终需要9次排列,因为第10个数字在第八个数字回到应该位置时也就排列好了
推广:n次冒泡排序需要n-1次排序
代码的实现
升序
#include <stdio.h>
//冒泡排序
void sort(int arr[], int n)
{
int i = 0;
int j = 0;
for (i = 0;i<n-1;i++)
{
for (j = 0; j < n-1; j++)
{
if (arr[j] > arr[j + 1])
{
int t = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = t;
}
}
}
}
//打印
void print(int arr[], int n)
{
int i = 0;
for (i = 0; i < n; i++)
{
printf("%d ", arr[i]);
}
}
int main()
{
//从小到大
int arr[10] = { 0 };
int i = 0;
int n = sizeof(arr) / sizeof(arr[0]);//求元素的个数
for (i = 0; i < n; i++)
{
scanf("%d", &arr[i]);
}//输入待排序的元素
sort(arr, n);//冒泡排序
print(arr, n);//打印
return 0;
}