文章目录
- 冒泡排序概念
- 冒泡排序算法思路
- 冒泡排序代码实现
- 冒泡排序优化
冒泡排序概念
冒泡排序是比较基础的排序算法之一,其思想是相邻的元素两两比较,较大的数下沉,较小的数冒起来,这样一趟比较下来,最大(小)值就会排列在一端。整个过程如同气泡冒起,因此被称作冒泡排序。
冒泡排序算法思路
冒泡排序的步骤是比较固定的:
1>比较相邻的元素。如果第一个比第二个大,就交换他们两个。
2>每趟从第一对相邻元素开始,对每一对相邻元素作同样的工作,直到最后一对。
3>针对所有的元素重复以上的步骤,除了已排序过的元素(每趟排序后的最后一个元素),直到没有任何一对数字需要比较。
冒泡排序代码实现
代码示例:
//冒泡排序
void BubbleSort(int* a, int n)
{
int end = 0;
for (end = n - 1; end >= 0; end--)
{
int i = 0;
for (i = 0; i < end; i++)
{
if (a[i]>a[i + 1])
{
Swap(&a[i], &a[i + 1]);
exchange = 1;
}
}
}
}
冒泡排序优化
如果在经过几次排序后,数据已经有序了,不经优化的冒泡排序仍会继续进行比较判断是否需要交换,这样就多做了许多的无用功。因此,我们在此处提出冒泡排序的优化方法来解决这种情况。让数据在有序后就直接跳出循环,结束冒泡排序,降低排序的时间。
//冒泡排序
void BubbleSort(int* a, int n)
{
int end = 0;
for (end = n - 1; end >= 0; end--)
{
int exchange = 0;//记录该趟冒泡排序是否进行过交换
int i = 0;
for (i = 0; i < end; i++)
{
if (a[i]>a[i + 1])
{
Swap(&a[i], &a[i + 1]);
exchange = 1;
}
}
if (exchange == 0)//该趟冒泡排序没有进行过交换,已有序
break;
}
}
时间复杂度: O(N^2)
空间复杂度: O(1)