活动地址:CSDN21天学习挑战赛
✅作者简介:C/C++领域新星创作者,为C++和java奋斗中
✨个人社区:微凉秋意社区
🔥系列专栏:经典算法
📃推荐一款模拟面试、刷题神器👉注册免费刷题
🔥前言
今天总结一下优化版的经典算法——冒泡排序,不同于以往的暴力二重for循环,这里的冒泡排序增加了一个标志位。我们要理解该冒泡排序的概念,算法流程与算法思想,探讨时间复杂度。这也是本专栏第六篇博文,感兴趣的朋友可以订阅以便持续观看。
也称气泡排序,是经典的交换排序方法。整个过程就是在无序区中对相邻元素进行两两比较,将不满足相对顺序的一对儿元素进行交换,再进行下一对元素的比较。
总结来说,每一趟冒泡排序将会排好一个元素(极值)。不断的在无序区中执行该步骤,如果在某一次比较的过程中没有发生元素的交换,则证明元素都已经有序,可以提前结束整个算法。或者直到无序区中的元素减少到一个时,整个算法结束,此时整个序列有序。
假如要对该序列进行冒泡排序,解析一下算法流程:
C++源代码:
#include
using namespace std;
//冒泡排序声明
void maopaosort(int A[], int len);
//冒泡排序实现
void maopaosort(int A[], int len)
{
for (int i = 0; i < len; i++) {
int flag = 0;//标志位
for (int j = i; j < len - i - 1; j++) {
if (A[j] > A[j + 1]) {
int temp = A[j];
A[j] = A[j + 1];
A[j + 1] = temp;
flag = 1;
}
}
if (flag == 0)//如果已经升序,不再继续外层循环,结束此函数
return;
}
return ;
}
int main(void)
{
int A[7] = { 3,6,7,4,8,9,10 };
int len = sizeof(A) / sizeof(A[0]);
cout << "排序前:" << endl;
for (int i = 0; i < len; i++) {
cout << A[i] << " ";
}
maopaosort(A,len);
cout << "排序后:" << endl;
for (int i = 0; i < len; i++) {
cout << A[i] << " ";
}
}
运行效果:
n-1
次,那么相当于遍历了n次,时间复杂度为O(n)。那么有关优化版冒泡排序算法的分析到此结束了,快去敲一波代码试试效果吧!最后期待你的关注与支持,让我们共同进步!