冒泡排序法需要两次扫描,所以从时间复杂度来说,是O(n2).
如果用图形表示,是这样的:
但是我们可以加以改进。
首先是,如果在排序中间,整个向量已经达到了有序状态,可以直接跳出来。
这样它的复杂度由一个三角形变为一个梯形。
同时,可能存在部分有序的状态,所以可以再次改进:
深蓝色为可能占用的时间复杂度。
我自己写了一个代码测试了一下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 |
|
遇到问题:
1、使用swap()的时候,格式是:
#include <algorithm>
using namespace std;
swap(a,b);
2、使用模板函数的时候,每一个模板函数都需要声明template <typename T> , 格式如下:
template <typename T>
T Mysort(T a) //与一般函数用法相同
{return 2*a;
}
3、出错解析:
这四行加起来是一个错误,编译器只不过在提示。
比如第一句是:在bubble函数的使用中
第二行解释其中是因为Mysort需要使用这个函数
第三行如果我们点击,提示出现在主函数中,是Mysort的使用的地方
第四行是真正的错误,也就是swap函数没有定义
4、运行结果:
上述算法就是sort()排序方法的一种实现原理
参考书籍:
1---《数据结构(C++语言版)》邓俊辉