C/C++ 冒泡排序的实现以及优化

简述冒泡排序

这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端(升序或降序排列),就如同碳酸饮料中二氧化碳的气泡最终会上浮到顶端一样,故名“冒泡排序”。

实质是从当前元素起,向后依次比较每一对相邻元素,满足条件就交换。
对所有元素均重复以上步骤,直至最后一个元素
写代码无非就是外循环表示排序的次数
内循环表示每次比较多少次

假设需要最多次的无序冒泡

void bubbleSort(int nums[],int len)
{
	for (int i = 0; i < len - 1; ++i)
	{
		for (int j = 0; j < len - 1 - i; ++j)
		{
			if (nums[j] > nums[j + 1])
			{
				int temp = nums[j];
				nums[j] = nums[j + 1];
				nums[j + 1] = temp;
			}
		}
	}
}

优化:假设提前完成排序

当内循环执行一次未发生虚幻,那么后面的排序是无意义的。
下面的这行代码其实是在排序好后,相当于又进行了一次内循环。
而这次内循环相当于检查,没有交换则bool值改变,随后 if 判断退出排序。
我个人感觉最理想的就是刚好排序好,就退出循环。

void bubbleSort(int nums[],int len)
{
	for (int i = 0; i < len - 1; ++i)
	{
		bool ischange = false;//交换标识符
		for (int j = 0; j < len - 1 - i; ++j)
		{
			if (nums[j] > nums[j + 1])
			{
				int temp = nums[j];
				nums[j] = nums[j + 1];
				nums[j + 1] = temp;
				ischange = true;//交换
			}
		}
		if (ischange == false)//如果没有交换,代表无需排序
		{
			break;
		}
	}
}

猜你喜欢

转载自blog.csdn.net/GameStrategist/article/details/108177517
今日推荐