#include <iostream>
#include <vector>
using namespace std;
void bubbleSort(vector<int>& srcVector)
{
//外层循环控制比较次数,内层循环控制每趟比较的次数;
//理解法确定循环条件
//如果有n个数据,那么其实按照冒泡排序的思路,挨个比较,每轮把最大值放最后,
//只要后面n - 1 个数据是比较出来的有序数,其实最开始这个元素就自带顺序了
//所以比较趟数是n - 1 趟,即srcVector.size() - 1趟,循环条件就是
//for (int i = 0; i < srcVector.size() - 1; i++)
//内层循环是说每趟比较多少次,其实就是等待比较的元素(待排序数据开始)到无序数据的末尾有几次相邻数据的比较,
//即有几个数据相互紧挨着进行比较,假如i = 0, 然后有五个数据,第一趟的比较次数就是5 - 0 - 1 = 四次,即比次数循环条件
//是for (int j = 0; j < srcVector.size() - 1 - i; j++); srcVector.size() - 1 表示几个数之间有几个间隔,- i表示排除已经有序
//的数的个数
//规律方法确定循环条件
//假如有5个数据 5 1 3 4 2
//冒泡过程:
// 第(i)一趟结果: 1 3 4 2 5 #5 依次和 1 3 4 2相邻数据比较并进行大数放前的交换,最后形成 1 3 4 2 5, 比较了4 次
// 第(i)二趟结果: 1 3 2 4 5 #1 依次和 3 2 4相邻数据比较并进行大数放前的交换,最后形成 1 3 4 2 5, 比较了3次
// 第(i)三趟结果: 1 2 3 4 5 #1 依次和 2 3 相邻数据比较并进行大数放前的交换,最后形成 1 3 4 2 5, 比较了2次
// 第(i)四趟结果: 1 2 3 4 5 #1 依次和 2 相邻数据比较并进行大数放前的交换,最后形成1 2 3 4 5, 比较了1次
//规律:趟数等于n(5) - 1 趟;每趟比较 n(5) - i(趟次) - 1 次
for (int i = 0; i < (int)srcVector.size() - 1; i++)
{
for (int j = 0; j < (int)srcVector.size() - 1 - i; j++)
{
if (srcVector[j] > srcVector[j + 1])
{
int temp = srcVector[j];
srcVector[j] = srcVector[j + 1];
srcVector[j + 1] = temp;
}
}
}
}
int main()
{
vector<int> a = { 1,3,9,3,5,6,2,3,3,8,7 };
bubbleSort(a);
for (int i = 0; i < (int)a.size(); i++)
{
cout << a[i] << " ";
}
cout << endl;
}
冒泡排序记录
于 2022-03-20 23:31:14 首次发布