冒泡排序(Bubble Sort)
一、算法思路
二、算法流程
三、算法实现
#include<iostream>
using namespace std;
typedef int KeyType;
struct ElemType
{
KeyType key;
int exist;
};
struct SeqList
{
ElemType *elem;
int length;
};
void BubbleSort_v1(SeqList &L)
{
ElemType x;
for(int i = 0; i < L.length; i++)
{
for(int j = 0; j < L.length - i; j++)
{
if(L.elem[j].key > L.elem[j+1].key)
{
x.key = L.elem[j+1].key;
L.elem[j+1].key = L.elem[j].key;
L.elem[j].key = x.key;
}
}
}
}
void BubbleSort_v2(SeqList &L)
{
ElemType x;
bool change;
int i, j;
for(i = 0; i < L.length; i++)
{
for(change = false, j = 0; j < L.length-i; j++)
{
if(L.elem[j].key > L.elem[j+1].key)
{
x.key = L.elem[j+1].key;
L.elem[j+1].key = L.elem[j].key;
L.elem[j].key = x.key;
change = true;
}
}
if(!change) // 针对有序序列,无需排序时,增加change变量可以使其在一趟排序完成判断
break;
}
}
int main()
{
ElemType a[] = { {4},{6},{2},{7},{5},{14},{1},{3},{8},{15},{10},{13},{9},{12},{11} };
SeqList L;
L.elem = a;
L.length = 15;
BubbleSort_v1(L);
// BubbleSort_v2(L);
for (int i = 0; i < L.length; i++)
{
cout << L.elem[i].key << endl;
}
return 0;
}
四、算法复杂度分析
时间复杂度为
O
(
n
2
)
O(n^2)
O(n2)
空间复杂度为
O
(
1
)
O(1)
O(1)
五、相关练习题