前言
冒泡排序基本思想:假设数据元素存放于数组L中,初始化时,有序区为空,无序区为0~n-1;在无序区中,每次均从头至尾一次比较相邻的两个元素j和j+1,若存在逆序,则交换两者。每执行这一过程成为一趟冒泡排序。
1. 编码
template<typename T> struct Disp
{
void operator()(T value)
{
cout << value << "\t";
}
};
//3. 冒泡排序
void BubbleSort(std::vector<int>& vec)
{
int len(vec.size());
if(len == 0) return;
cout << "display origin array:" << endl;
for_each(vec.begin(), vec.end(), Disp<int>()); //打印原始的数据
for(int i=0; i<len-1; ++i)
{
bool flag(false); //冒泡排序发生变化标志位
for(int j=len-1; j>i; --j)
{
if(vec[j-1] > vec[j]) //后面的数字小于了前面的数字了,交换
{
int temp(vec[j-1]);
vec[j-1] = vec[j];
vec[j] = temp;
flag = true;
}
}
if(!flag) break; //没有逆序的了,跳出去结束程序
}
cout << "\narray sorted:" << endl;
for_each(vec.begin(), vec.end(), Disp<int>());
}