冒泡排序
时间复杂度:O(N²)
稳定性:稳定
排序原理:
从前往后依次比较相邻的两个数据(如0:1 1:2 2:3 3:4 ... n:tail),
根据排序方向,将最大(最小)值移到最后面,一次遍历浮出一个数据,
N次遍历之后,就将所有数据排序完成了。
排序过程:
见源码及注释
适用场景:
数据量少、算法时间要求低、数据相对有序的场景中,冒泡排序是一个比较好的选择,实现简单稳定性好。
参数:
data 排序数据
lenth 数据量
direction 排序方向 从大到小/从小到大
源码:
void BubbleSort(int* data, int lenth, int direction)
{
int i, j;
if(direction)//从小到大
for (j = lenth - 1; j > 1; j--)//已排序数据放到最后面 遍历长度减-
{
for (i = 0; i < j; i++)//从前往后遍历 泡泡往后挤
{
if (data[i] > data[i + 1])//把大的数据往后移动 注意两数相等的情况是不交换的 算法相对稳定
{
DataSwap(data[i], data[i + 1]);//两数交换
}
}
}
else//从大到小
for (j = 0; j < lenth - 1; j++)//已排序数据放到最前面
{
for (i = lenth - 1; i > j; i--)//从后往前遍历 泡泡往前挤
{
if (data[i] > data[i - 1])//把大的数据前移
{
DataSwap(data[i], data[i - 1]);
}
}
}
}