简述冒泡排序
这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端(升序或降序排列),就如同碳酸饮料中二氧化碳的气泡最终会上浮到顶端一样,故名“冒泡排序”。
实质是从当前元素起,向后依次比较每一对相邻元素,满足条件就交换。
对所有元素均重复以上步骤,直至最后一个元素
写代码无非就是外循环表示排序的次数
内循环表示每次比较多少次
假设需要最多次的无序冒泡
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;
}
}
}