一 冒泡排序了解
冒泡排序法就是让数组元素像水中的气泡一样逐渐上浮,进而达到排序的目的。
流程图:
二 冒泡排序伪代码实现
bubbleSort(A,N)
{
flag=1
i=0; //未排序部分的起始下标,因为每次遍历排序都会增加一个元素到排序部分
while flag
{
flag=0;
for j 从N-1到i+1
{
if(A[j] < A[j-1])
{
A[j] 与 A[j-1] 交换
flag=1 //代表尚未排好序,需要继续排序
}
}
i++
}
}
三 冒泡排序 c++ 代码实现
冒泡排序法所需的主要变量:
A[N] | 长度为N的整型数组 |
---|---|
i | 循环变量,表示未排序部分的开头元素,初始值为0,从数组开头向末尾移动 |
j | 循环变量,用于对未排序部分中的相邻元素两两比较,从A的末尾N-1开始,减少到 i+1 结束 |
flag | 标志变量,如果 一次循环中flag初始值为0,循环后仍是0,代表数组已经有序,不需要再循环排序 |
代码如下:
void bubbleSort(vector<int> &ivec)
{
if(ivec.size()==0) return;
bool flag= true;
decltype(ivec.size()) i=0;
while(flag)
{
flag= false;
for (decltype(ivec.size()) j = ivec.size()-1; j !=(i+1) ; --j) {
if(ivec.at(j)<ivec.at(j-1))
{
swap(ivec.at(j),ivec.at(j-1));
flag= true;
}
}
++i;
}
}
四 插入排序时间复杂度与稳定性分析。
稳定性: 冒泡排序法仅对数组的相邻元素进行比较和交换,因此键相同的元素不会交换顺序,因此冒泡排序是一种较为稳定的排序算法。 但是需要注意,一旦将比较运算符 A[ j ]< A[ j-1 ] 修改为 A[ j ]<= A[ j-1 ] ,算法就会失去稳定性。
复杂度:假设数据总量是N,冒泡排序法需对未排序部分的相邻元素进行 (N-1)+(N-2)+(N-3)+。。。。+2+1=(N^2-N)/2次比较,即算法复杂度数量级为O(N的2次方)。
冒泡排序中的交换次数又称为反序数或逆序数,可用于体现数列的错乱程度。
--------------------------------------------------------我是有底线的-------------------------------------------------------------
感谢能够观看博客的各位开发爱好者们,有问题或建议发表评论呐,★,°:.☆( ̄▽ ̄)/$:.°★ 。