冒泡排序C语言实现 - 源码详解

    冒泡排序

    时间复杂度: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]);
				}
			}
		}
}

 

你可能感兴趣的:(C/C++)