/*
* 内容: 冒泡排序法
* 作者: wolves_liu
* 日期: 2018.3.21
* 参考: 《大话数据结构》
*/
// 线性表顺序存储结构
#define Max 20
typedef struct
{
int r[Max+1];
int length;
}Sqlist;
// 交换L->r[i]和L->r[j]的值
void swap(Sqlist *L, int i, int j)
{
int temp = 0;
temp = L->r[i];
L->r[i] = L->r[j];
L->r[j] = temp;
}
// (伪)冒泡算法1
void BubbleSort0(Sqlist *L) //小的数放上面去
{
int i, j;
for(i=1; i<L->length; i++) // 用第i个元素跟它后面的每一个元素都进行比较
{
for(j=i+1; j<=L->length; j++)
{
if(L->r[i] > L->r[j])
{
swap(L, i, j); // 交换L->r[i]和L->r[j]的值
}
}
}
}
// (正宗)冒泡算法2
void BubbleSort1(Sqlist *L)
{
int i, j;
for(i=1; i<L->length; i++)
{
for(j=L->length-1; j>=i; j--) // j从倒数第二个开始
{
if(L->r[j] > L->r[j+1]) // 前者 > 后者 就交换
{
swap(L, j, j+1);
}
}
}
}
// (对冒泡算法进一步优化)冒泡算法3
void BubbleSort3(Sqlist *L)
{
int i = 0, j = 0;
bool flag = 1; // 用flag作标记
for(i=1; i<L->length && flag; i++) // 如果flag为真,就执行循环
{
flag = 0;
for(j=L->length-1; j>=i; j--)
{
if(L->r[j] > L->r[j+1])
{
swap(L, j, j+1);
flag = 1; // 如果执行了交换函数,让flag为真,就可以继续执行循环;
// 如果没有执行交换函数,则flag为假,就不用执行外循环了。
}
}
}
}
// 自己写的,r[0]-r[4]
void swap(int &a, int &b)
{
int temp = a;
a = b;
b = temp;
}
int main(int argc, _TCHAR* argv[])
{
int r[5] = {8, 6, 36, 2, 0};
// 对应(伪)冒泡算法1
for(int i=0; i<4; i++)
{
for(int j=i+1; j<5; j++)
{
if(r[i] > r[j])
{
swap(r[i], r[j]);
}
}
}
// 对应(正宗)冒泡算法2
for(int i=0; i<4; i++)
{
for(int j=3; j>=i; j--) //j是倒数第二开始
{
if(r[j] > r[j+1])
{
swap(r[j], r[j+1]);
}
}
}
for(int i=0; i<5; i++)
{
cout<<(r[i])<<endl;
}
return 0;
}