#include <iostream>
#include <algorithm>
using namespace std;
void bubble(int a[], int len)
{
/*
* 从头开始向后,一次结束后,最后的那个数就是最大的,
* 然后长度减一,就是减去最后那个最大的数,因为它不需要再排序了
* 当一次排序结束后,再从头开始,依次往后,结束后,最后一个又是最大的
7 4 2 6
4 7 2 6
5 4 2 7 6
5 4 2 6 7(最大) 第一轮结束
4 5 2 6
4 2 5 6(最大) 第二轮结束
2 4 5(最大) 第三轮结束
2 4(最大) 第思轮结束
2(最大)
*/
cout<<"冒泡排序法:"<<endl;
int flag;//判断是否发生了交换 0:无交换 1:交换
do
{
flag = 0;//清零
for (int i=1; i<len; i++)
{
cout<<"第"<<i<<"次排序: "<<endl;
if (a[i] < a[i-1])
{
swap(a[i], a[i-1]);
for (int j=0; j<len; j++)
{
cout<<a[j]<<" ";
}
cout<<endl;
flag = 1;
}
}
--len; //每次排序后都是长度减少1,提高效率
} while(flag == 1);
//cout<<"第 "<<i<<" 次排序"<<endl;
}
void show(int a[], int len)
{
for (int i=0; i<len; i++)
{
cout<<a[i]<<" ";
}
cout<<endl;
}
int main(int argc, char* argv[])
{
int a[5] = {5,7,4,2,6};
cout<<"排序前:"<<endl;
show(a, 5);
bubble(a, 5);
cout<<"排序后:"<<endl;
show(a, 5);
getchar();
return 0;
}