随机输入 1,2,3,4,5 五个数 顺序混乱 共有5!=120种可能性
我们想要得到这组数的有序排列,即从小到大或者从大到小排列
比如 5 4 3 2 1
我们就要用算法来解决这个问题
今天来介绍冒泡排序
例:
有数组
1 2 3 4 5
输出
5 4 3 2 1
我们将相邻的两个数进行比较
使较大的数位于左边
第一轮
1 | 2 | 3 | 4 | 5 |
比较 | 比较 |
2 | 1 | 3 | 4 | 5 |
比较 | 比较 |
2 | 3 | 1 | 4 | 5 |
比较 | 比较 |
2 | 3 | 4 | 1 | 5 |
比较 | 比较 |
第二轮
2 | 3 | 4 | 5 | 1 |
比较 | 比较 |
3 | 2 | 4 | 5 | 1 |
比较 | 比较 |
3 | 4 | 2 | 5 | 1 |
比较 | 比较 |
第三轮
3 | 4 | 5 | 2 | 1 |
比较 | 比较 |
4 | 3 | 5 | 2 | 1 |
比较 | 比较 |
第四轮
4 | 5 | 3 | 2 | 1 |
比较 | 比较 |
最后得到
5 | 4 | 3 | 2 | 1 |
代码如下:
#include <iostream>
using namespace std;
void change(int* a, int* b)
{
int tem;
tem = *a;
*a = *b;
*b = tem;
}
int main()
{
int i;
int j;
int k;
int a[5] = { 1,2,3,4,5 };
for (i = 0; i < 4; i++)
{
for (j = 0; j < 4 - i; j++)
{
if (a[j] < a[j + 1])
{
change(&a[j], &a[j + 1]);
}
}
}
for (k = 0; k < 5; k++)
{
cout << a[k] << endl;
}
return 0;
}
运行结果