C++实现冒泡排序法
1、算法步骤
1.比较相邻的元素。如果第一个比第二个大,就交换他们两个。
2.对每一对相邻元素做同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。
3.针对所有的元素重复以上的步骤,除了最后一个。
4.持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。
哨兵:用于记录一趟排序中有无发生元素交换,若在某一趟中未发生元素交换,即可立即终止排序。加入哨兵可减少代码所需计算量。
2、C++实现代码(带哨兵)
#include <iostream>
using namespace std;
void sort()
{
//初始化待排序数组
int n;
cout << "输入数据容量:";
cin >> n;
int* data;
data = new int[n];
for (int i = 0; i < n; i++)
{
cout << "输入第" << i + 1 << "个数:";
cin >> data[i];
}
//开始使用冒泡法排序
for (int j = n - 2; j >= 0; j--) //对于长度为n的数组最多进行n-1趟排序
{
int flag = 0; //定义哨兵用于记录有无发生元素交换
for (int k = 0; k < j + 1; k++) //一趟排序
{
if (data[k] > data[k + 1]) //比较相邻元素大小以确定是否需要交换
{
int temp;
temp = data[k];
data[k] = data[k + 1];
data[k + 1] = temp;
flag = flag + 1; //发生元素交换,flag加一
}
}
if (flag == 0) //每一趟排序结束后检查哨兵
break;
}
//输出排序结果
cout << "排序结果为:";
for (int m = 0; m < n; m++)
cout << data[m];
}
int main()
{
sort();
return 0;
}