小中大用冒泡排序只有70分

本文深入剖析了冒泡排序的原理,通过实例揭示其在处理小、中、大规模数据时的性能表现,指出在效率方面存在的局限性,引发对于排序算法优化的思考。

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

在这里插入图片描述

#include<ctype.h>
#include<stdio.h>
#include<iostream>
using namespace std;
int main(){
	int n,temp,a[100000],flag;
	scanf("%d",&n);
	for(int i=0;i<n;++i){
		scanf("%d",&a[i]); 
	}
	for(int i=1;i<n;++i){
		flag=0;
		for(int j=1;j<n;++j){
			if(a[j]>a[j-1]){
				temp=a[j-1];
				a[j-1]=a[j];
				a[j]=temp;
				flag=1;
			}
		}
		if(flag==0){
			break;
		}
	}
	if(n%2==0){
		if((a[n/2]+a[n/2-1])%2==0){
		    printf("%d %d %d",a[0],(a[n/2]+a[n/2-1])/2,a[n-1]);
		}
		else{
			printf("%d %.1f %d",a[0],(a[n/2]+a[n/2-1])/2.0,a[n-1]);
		}
	}
	else{
		printf("%d %d %d",a[0],a[n/2],a[n-1]);
	}
	return 0;
}

在这里插入图片描述

《算法导论》作为计算机科学的经典教材,对算法析的讲解深入浅出,而大O符号作为描述算法时间复杂度的工具,在学习算法时显得尤为重要。理解大O符号不仅能帮助我们预测算法在大规模数据处理中的表现,还能指导我们选择最优的算法实现。 参考资源链接:[《算法导论》第三版英文PDF](https://wenku.csdn.net/doc/657ju21v9s) 要深入理解大O符号,首先需要明白它代表的含义。大O符号描述的是算法运行时间随着输入规模增长的变化趋势,是一种上界表示法。例如,如果一个算法的时间复杂度为O(n),那么算法的执行时间与输入规模n成线性关系。对于更复杂的算法,如排序算法中的快速排序,其平均时间复杂度为O(n log n),这表示算法的执行时间会随着输入规模n的增长而以n log n的速度增长。 实际案例可以加深对大O符号的理解。比如,考虑一个简单的数组遍历问题,我们要找出数组中最大的元素。一个朴素的实现是遍历数组中的每个元素,并记录下遇到的最大值。该算法的时间复杂度为O(n),因为无论数组中的元素有多少,我们都需要遍历一次数组。 以查找最大元素为例,假设数组长度为n,那么在最坏的情况下,我们需要进行n次比较。而在最佳情况下,如果第一个元素就是最大值,我们只需要一次比较。虽然O(n)表示的是最坏情况下的时间复杂度,但在实际应用中,它为我们的算法性能提供了一个可靠的上界。 更进一步,我们可以比较不同的排序算法来展示大O符号的应用。冒泡排序的时间复杂度是O(n^2),而快速排序的平均时间复杂度为O(n log n)。在实际应用中,如果输入规模较小,冒泡排序可能因为其实现简单而更快,但随着输入规模的增加,快速排序通常会更优。 学习并理解这些概念,有助于我们在项目中做出更明智的决策。例如,在设计一个需要排序功能的系统时,如果数据量非常大,我们会倾向于使用快速排序而不是冒泡排序,以确保系统的性能。 为了更深入地掌握算法的时间复杂度析,推荐参考《Introduction to Algorithms 3rd Edition》。这本书提供了大量的实例和练习题,帮助读者通过实践来巩固理论知识,并且涵盖了多种算法的详细析,是理解大O符号不可多得的资源。 在完成对大O符号的初步学习后,为了更全面地提升算法和编程技能,建议继续探索《算法导论》中的其他主题,如图算法、动态规划和计算几何等。这些主题不仅能够加深对算法复杂度的理解,还能帮助你掌握解决复杂问题的多种方法,为计算机编程和算法设计打下坚实的基础。 参考资源链接:[《算法导论》第三版英文PDF](https://wenku.csdn.net/doc/657ju21v9s)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

yma16

感谢支持!共勉!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值