1.什么是冒泡排序?
冒泡排序的英文Bubble Sot,是一种最基础的交换排序。之所以叫做冒泡排序,因为每一个元素都可以像小气泡一样,根据自身大小一点一点向数组的一侧移动。
2.什么情况下可以使用冒泡排序?
冒泡排序比较简单,但是时间复杂度较大,使用于小规模的排序。
3.冒泡排序运行的原理:
比较相邻的元素,如果第一个比第二个大,就交换他们两个;对每一对相邻元素做同样的工作,从开始第一对到结尾的最后一对,在这一点,最后的元素应该会是最大的数。
3.冒泡排序的运:行流程示意图:
4.具体流程解释(可参考:http://t.csdn.cn/8aXz2)
首先,我们可以定义一个乱序的整型数组
arr[10]={8,1,5,6,7,4,3,1,2,0};
根据冒泡排序的原理,我们可以将第一个元素和与其相邻的元素进行比较,如果前一个元素比后一个元素的值大则进行值的交换。
因此,我们可以发现8是大于1的,所以对这两个数组的值进行交换。
交换前:
交换后:
同样的道理,以此类推,将交换完后的数值与下一个值进行比较,进行值的相关操作。
(中间的过程过于啰嗦重复。为了不耽误各位观众老爷,小的在此就省略了,承蒙厚爱,还望谅解)
直到将最大的值排序到数组的最后一个位置,这就是冒泡排序的一趟排序过程。
而我们可以将整个冒泡排序的过程分解为类似的多个子过程,以此实现对数组所有元素的排序。
因此对于冒泡排序的实现,我们既可以通过使用嵌套循环实现,也可以通过使用函数递归来实现冒泡排序。
5.对于冒泡排序的过程总结:
算法的实现:
冒泡排序源代码:
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
void bubble_sort(int* arr, int n)
{
for (int i = 0; i < n; i++)//需要n-1
{
int flag = 1;
for (int j = 0; j < n - 1 - i; j++)
{
int tmp = 0;
if (arr[j] > arr[j + 1])
{
flag = 0;
tmp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = tmp;
}
}
if (1 == flag)
break;
}
}
int main()
{
int arr[20] = { 0 };
int n = 0;
scanf("%d", &n);
for (int j = 0; j < n; j++)
{
scanf("%d", &arr[j]);
}
int sz = sizeof(arr) / sizeof(arr[0]);
bubble_sort(arr,sz);
for (int i = 0; i < sz; i++)
{
printf("%d ", arr[i]);
}
return 0;
}
6。总结:
本文对于冒泡排序的介绍和讲解仍有很大的纰漏,如有错误欢迎指正,承蒙厚爱,感谢每一位看到此篇文章的友友,感激不尽!!!