一.冒泡排序算法的思想
冒泡排序:它可以进行多次的两数比较,就像鱼儿在水中不断地吐泡泡一样,不断地往上浮,类似于从小到大的排序方法。
二.代码
升序
#include<iostream>
using namespace std;
int main()
{
int arr[]={4,5,6,3,2,1};
//利用sizeof函数获取数组内存大小,并且除以1个数组元素的内存大小,最后就能得到长度
int len=sizeof(arr)/sizeof(arr[0]);
int temp=0; //类似空桶
cout<<"原始的状态:";
//原始状态
for(int i=0;i<len;i++){
cout<<arr[i]<<" ";
}
cout<<endl;
//外层循环:控制行数
for(int i=1;i<=len;i++){
//内层循环:控制比较次数
for(int j=0;j<len-i;j++){
//从小到大开始排序,就像气泡一个个地往上浮
if(arr[j]>arr[j+1]){
//采用交换思想,结合后面的图形解说
temp=arr[j];
arr[j]=arr[j+1];
arr[j+1]=temp;
}
}
}
cout<<"冒泡排序后:";
for(int i=0;i<len;i++){
cout<<arr[i]<<" ";
}
return 0;
}
注意事项:外层循环里的for(int i=1;i<=len;i++)
为什么是从1开始的呢?因为后面的图形中,我是从第一轮开始排序的。
三.图文解析
冒泡排序采取了两两比较的方法。
结论
控制行的规律:len
控制比较次数的规律:len-i
交换思想:
四.降序的实现
我们可以将 if(arr[j]>arr[j+1])
改成 if(arr[j]<arr[j+1])
之后,就能实现降序的效果。
五.排序中的函数
sort函数:它采用的是排序算法的思想进行代码封装的。
1.升序
// sort():排序函数 ,默认是从小到大
// sort(起始位置,最终位置) →sort(first,end)
// 前两个参数都是有数组名的
#include<iostream>
#include<cstring>
#include<algorithm> //算法头文件
using namespace std;
int n;
int main()
{
int s[n+10];
cin>>n;
for(int i=0;i<n;i++){
cin>>s[i];
}
sort(s,s+n);
for(int i=0;i<n;i++){
cout<<s[i]<<" ";
}
return 0;
}
输入样例:
6
4 5 6 3 2 1
输出样例:
1 2 3 4 5 6
2.降序
// sort():排序函数
// sort(起始位置,最终位置) →sort(first,end)
// 前两个参数都是有数组名的
// 第三个参数cmp →函数名 → 排序规则
// 默认是从小到大,修改即可
#include<iostream>
#include<cstring>
#include<algorithm> //算法头文件
using namespace std;
bool cmp(int a,int b){
return a>b;
}
int n;
int main()
{
int s[n+10];
cin>>n;
for(int i=0;i<n;i++){
cin>>s[i];
}
sort(s,s+n,cmp);
for(int i=0;i<n;i++){
cout<<s[i]<<" ";
}
return 0;
}
输入样例:
6
4 5 6 3 2 1
输出样例:
6 5 4 3 2 1
六.动态图展示网址
https://visualgo.net/zh/sorting