冒泡排序法
- 1.冒泡排序法的原理
- 2.代码实现
- 注意事项
1.冒泡排序法的原理
其原理是依次把数组中相邻两个数比较大小来决定是否换顺序,从而把最大(小)的数字排在最前(后)的方法。
例如:假设一维数组arr[5]={1,4,2,5,0],那么冒泡排序法原理为(其中一种方式):
- 1<4,不交换顺序。
- 4>2,交换顺序,arr[5]={1,2,4,5,0}.
- 4<5,不交换顺序。
- 5>0,交换顺序,arr[5]={1,2,4,0,5}.
- 最大数字已经排在第5位,下面从第一位开始排序到第四位截止:
- 1<2,不交换顺序。
- 2<4,不交换顺序。
- 4>0,交换顺序,arr[5]={1,2,0,4,5}.
- 第二大数字排在第四位,下面从第一位开始排序到第三位截止。。。以此类推,直到循环结束。
2.代码实现
这里使用嵌套循环语句实现上述过程:
#include<iostream>
using namespace std;
int main()
{
int arr[5] = { 1,4,2,5,0 }, i, j, s;
for (i = 0; i < 5; i++)
{
for (j = 0; j < 4-i; j++)
{
if (arr[j] > arr[j + 1])
{
s = arr[j + 1];
arr[j + 1] = arr[j];
arr[j] = s;
}
}
}
for (i = 0; i < 5; i++)
{
cout << arr[i] << endl;
}
system("pause");
return 0;
}
- 其中第6-17行代码构成冒泡排序法。
- 改变数据输入行代码,可以改变数据输入方式。
- 改变18-21行代码,可以决定输出的数组是升序排列还是降序排列。
注意事项
注意循环变量下标取值范围,如该代码中j<4-i.如果改成j<5-i,会导致数组下标溢出,如下错误代码:
Run-Time Check Failure #2 - Stack around the variable ‘arr’ was corrupted.