目录
排序概念
排序应用
常见的排序算法
BubbleSort冒泡排序
整体思路
图解分析 
代码实现
每趟
写法1
//写法1
for (int i = 0; i < n-1; i++)
{
if (a[i] > a[i + 1])//i=n-1就越界了
{
Swap(&a[i], &a[i + 1]);
}
}
写法2
//写法2
for (int i = 1; i < n; i++)
{
if (a[i - 1] > a[i])//i=n-1没有越界,
{
Swap(&a[i - 1], &a[i]);
}
}
代码NO1
void Swap(int* p1, int* p2)
{
int tmp = *p1;
*p1 = *p2;
*p2 = tmp;
}
void BubbleSort(int* a, int n)
{
for (int j = 0; j < n; j++)
{
//一趟
for (int i = 0; i < n - 1 - j; i++)//i要从第一个开始交换
{
if (a[i] > a[i + 1])//i=n-1就越界了
{
Swap(&a[i], &a[i + 1]);
}
}
}
代码NO2优化
void Swap(int* p1, int* p2)
{
int tmp = *p1;
*p1 = *p2;
*p2 = tmp;
}
void BubbleSort(int* a, int n)
{
for (int j = 0; j < n; j++)
{
//一趟
bool exchange = false;
for (int i = 0; i < n - 1 - j; i++)//i要从第一个开始交换
{
if (a[i] > a[i + 1])//i=n-1就越界了
{
Swap(&a[i], &a[i + 1]);
exchange = true;
}
}
if (exchange == false)
{
break;
}
}
}
时间复杂度
🙂感谢大家的阅读,若有错误和不足,欢迎指正!