1.冒牌排序:分为三步进行(见程序代码注释)
2.对于半瓶子选手(就是我啦,大概知道却老是不明不白不敢动手写)主要理解二点即可:
(1) 即外层循环是什么?内层循环是什么?
外层循环:就是排序轮数
内层循环:就是对比次数,并且在其中写入排序逻辑(相邻比大小)
(2) 基本思路逻辑
总结:数组中有n个数 9
排序总轮数: n - 1 8
每轮对比次数:n - 排序轮数 - 1 第0轮:比较8次
#include<iostream>
using namespace std;
int main()
{
/*
作用: 最常用的排序算法,对数组内元素进行排序
1.比较相邻的元素。如果第一个比第二个大,就交换他们两个。
2.对每一对相邻元素做同样的工作,执行完毕后,找到第一个最大值。
3.重复以上的步骤,每次比较次数-1,直到不需要比较
排序轮数(外层循环) 4 2 8 0 5 7 1 3 9 对比次数(内层循环) 九个数字八个相邻的
0 2 4 0 5 7 1 3 8 9 8 找到了第一个最大数 2 4 0 5 7 1 3 8 9 -->9
1 2 0 4 5 1 3 7 8 9 7 找到了第二个最大数 2 0 4 5 1 3 7 8 -->8
2 0 2 4 1 3 5 7 8 9 6 找到了第三个最大数 0 2 4 1 3 5 7 -->7
3 0 2 1 3 4 5 7 8 9 5 找到了第四个最大数 0 2 1 3 4 5 -->5
4 0 1 2 3 4 5 7 8 9 4 找到了第五个最大数 0 1 2 3 4 -->4
5 0 1 2 3 4 5 7 8 9 3 找到了第六个最大数 0 1 2 3 -->3
6 0 1 2 3 4 5 7 8 9 2 找到了第七个最大数 0 1 2 -->2
7(共8轮) 0 1 2 3 4 5 7 8 9 1 找到了第八个最大数 0 1 -->1
总结:数组中有n个数 9
排序总轮数: n - 1 8
每轮对比次数:n - 排序轮数 - 1 第0轮:比较8次
*/
int arr[9] = { 4,2,8,0,5,7,1,3,9 };
int len = sizeof(arr) / sizeof(arr[0]);
cout << "排序前:" << endl;
for (int i = 0;i < len;i++)
{
cout << arr[i] << " ";
}
cout << endl;
//开始冒泡排序
for (int i = 0;i < len - 1;i++) //总共排序轮数为:元素个数 - 1
{
//内层循环:次数 = 元素个数 - 当前轮数 - 1
for (int j = 0;j < len - i - 1;j++)
{
//如果第一个数字比第二个数字大,交换两个数字
if (arr[j] > arr[j + 1])
{
int temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
//排序后结果
cout << "排序后:" << endl;
for (int i = 0;i < len;i++)
{
cout << arr[i] << " ";
}
system("pause");
return 0;
}
有帮助的话记得留个评论呗~