1. 复杂度分析
最好时间复杂度为O(n),初始状态是正序,一趟扫描即可完成排序。
最坏时间复杂度为O(n2),初始状态是反序,需要进行n-1趟排序。
平均时间复杂度为O(n2)。
2. 算法稳定性
冒泡排序是一种稳定排序算法。
3. 冒泡排序的三种实现
//冒泡排序1
void BubbleSort1(int A[],int n){
for (int i = 0;i<n-1;++i){
for (int j = 1;j<n-i;++j){
if(A[j-1]>A[j])
swap(A[j-1],A[j]);
}
}
}
//冒泡排序2
//设置一个标志,若这一趟发生交换,则为true;否则为false
//如果有一趟没有发生交换,则说明排序已完成
void BubbleSort2(int A[],int n){
bool bFlag = true;
int i = 0;
while(bFlag){
bFlag = false;
for (int j = 1;j<n-i;++j){
if(A[j-1]>A[j]){
swap(A[j-1],A[j]);
bFlag = true;
}
}
++i;
}
}
//冒泡排序3
//每一趟遍历,记录最后发生交换的位置的下标
void BubbleSort3(int A[],int n){
int index = n;
while(index>0){
int k = index;
index = 0;
for (int j = 1;j<k;++j){
if(A[j-1]>A[j]){
swap(A[j-1],A[j]);
index = j;
}
}
}
}