数据结构与算法-冒泡排序

本文详细介绍了冒泡排序算法,包括其基本思想、升序和降序的实现方式,并通过图文解析加深理解。还讨论了排序中的`sort`函数及其用法,提供了输入样例及动态图展示链接,帮助读者全面掌握冒泡排序。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一.冒泡排序算法的思想

冒泡排序:它可以进行多次的两数比较,就像鱼儿在水中不断地吐泡泡一样,不断地往上浮,类似于从小到大的排序方法。

二.代码

升序

#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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值