冒泡排序是常用的排序算法,用于对数组内元素进行排序 ;
排序要点:
1、比较相邻的元素。如果第一个比第二个大,就交换他们两个。
2、对每一对相邻元素做同样的工作,执行完毕后,找到第一个最大值。
3、重复以上的步骤,每次比较次数-1,直到不需要比较
示例: 将数组 { 410000,2,81,0,5,71,1,3991,900 } 进行升序排序
1、array + 从后往前冒泡:
#include<iostream>
using namespace std;
void BubbleSort( int * arr, int len)
{
// 开始冒泡排序,第一层循环是排序轮数
for(int i=0;i < (len -1 ); i++ )
{
//二层实现循环对比,对比次数 = 元素个数 - 当前轮数 - 1
for(int j=0; j < (len-i-1); j++ )
{
if (arr[j] > arr[j+1])
{
int tmp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = tmp;
}
}
}
}
void PrintArray( int * arr , int len )
{
for(int a = 0; a < len; a++)
{
cout << arr[a] << endl;
}
}
int main() {
int arr[9] = { 410000,2,81,0,5,71,1,3991,900 };
int len = sizeof(arr) / sizeof(int);
BubbleSort( arr, len);
PrintArray( arr, len);
return 0;
}
输出结果如下:
0
1
2
5
71
81
900
3991
410000
2、vector + 从前往后冒泡:
#include<iostream>
using namespace std;
#include<vector>
#include<algorithm>
void BubbleSort( vector<int> &vv)
{
// 开始冒泡排序,第一层循环是排序轮数
for(int i=0;i < vv.size(); i++ )
{
//从前往后移动对比: 二层实现循环对比,对比次数 = 元素个数 - 当前轮数 - 1
for(int j=i+1; j < vv.size(); j++ )
{
if (vv[i] > vv[j])
{
int tmp = vv[j];
vv[j] = vv[i];
vv[i] = tmp;
}
}
}
}
void PrintVector( int a )
{
cout << a << endl;
}
int main() {
int arr[9] = { 666,12,81,0,52,71,1,391,90 };
vector<int> vv(arr, arr + sizeof(arr)/sizeof(arr[0]));
BubbleSort( vv);
// for_each(iterator beg, iterator end, _func);
for_each( vv.begin(), vv.end(), PrintVector );
return 0;
}