当前位置: 首页 > news >正文

【例题】lanqiao3226 宝藏排序Ⅱ

在这里插入图片描述
样例输入

5
1 5 9 3 7

样例输出

1 3 5 7 9

解题思路

这里的n≤10^5,说明O(n ^2)的算法行不通。

基于比较的高效算法和基于数值划分的高效算法全部参考这篇文章

代码

最简单的自带排序

n=int(input())
a=list(map(int,input().split()))a.sort()
print(' '.join(map(str,a)))

利用桶排序

n=int(input())
a=list(map(int,input().split()))def bucket_sort(a,bucket_num):minval,maxval=min(a),max(a)# 桶大小bucket_size=(maxval-minval+1)//bucket_numbucket=[[] for i in range(bucket_num+1)]for x in a:bucket_idx=(x-minval)//bucket_sizebucket[bucket_idx].append(x)# 每个桶单独排序ans=[]for b in bucket:b.sort()ans+=breturn ansa=bucket_sort(a,5)
print(' '.join(map(str,a)))

归并排序

n=int(input())
a=list(map(int,input().split()))def merge(l,r):merged=[]l_id=0r_id=0while l_id<len(l) and r_id<len(r):if l[l_id]<=r[r_id]:merged.append(l[l_id])l_id+=1else:merged.append(r[r_id])r_id+=1merged.extend(l[l_id:])merged.extend(r[r_id:])return merged
def merge_sort(lst):if len(lst)<=1:return lstmid=len(lst)//2l=merge_sort(lst[:mid])r=merge_sort(lst[mid:])return merge(l,r)a=merge_sort(a)
print(' '.join(map(str,a)))

快速排序

n=int(input())
a=list(map(int,input().split()))# 求出基准值的位置排序即可
def partition(a,left,right):#找基准值,为a[left]idx=left+1for i in range(left+1,right+1):if a[i]<=a[left]:a[i],a[idx]=a[idx],a[i]idx+=1#把前半部分的最后一个和基准值对调a[left],a[idx-1]=a[idx-1],a[left]#返回基准值坐标return idx-1
def quicksort(a,left,right):if left<right:mid=partition(a,left,right)#此时a分为三部分:a[left:mid],a[mid],a[mid+1:right+1]quicksort(a, left, mid-1)quicksort(a,mid+1,right)#只需要考虑怎么把当前的问题分成两个子问题           
quicksort(a, 0, n-1)
print(' '.join(map(str,a)))

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • jacoco生成单元测试覆盖率报告
  • Nginx的使用场景:构建高效、可扩展的Web架构
  • 数据管理生态的核心解析:数据库、数据仓库、数据湖、数据平台与数据中台的关系与实现
  • 【C++】缺省(默认)参数
  • SpringBoot 图书管理系统
  • 鸿蒙开发笔记_电商严选02_登录页面跳转到我的页面、并传值
  • Matlab:科学计算与工程应用的强大利器
  • 【Linux】精通GDB:打造你的Linux调试超能力
  • cJSON-轻量级解析模块、字符串的神——编织STM32C8T6与阿里云信息传递的纽带
  • 引用和指针的区别(面试概念性题型)
  • cross-plateform 跨平台应用程序-09-phonegap/Apache Cordova 介绍
  • 使用nvm工具实现多个nodejs版本的维护和切换
  • 炫酷HTML蜘蛛侠登录页面
  • 裸金属服务器与云服务器的区别有哪些?
  • vue3路由基本使用
  • canvas 高仿 Apple Watch 表盘
  • Docker: 容器互访的三种方式
  • input的行数自动增减
  • iOS仿今日头条、壁纸应用、筛选分类、三方微博、颜色填充等源码
  • iOS高仿微信项目、阴影圆角渐变色效果、卡片动画、波浪动画、路由框架等源码...
  • Java面向对象及其三大特征
  • jQuery(一)
  • MobX
  • PHP的Ev教程三(Periodic watcher)
  • SpiderData 2019年2月13日 DApp数据排行榜
  • Webpack入门之遇到的那些坑,系列示例Demo
  • 编写高质量JavaScript代码之并发
  • 后端_ThinkPHP5
  • 基于阿里云移动推送的移动应用推送模式最佳实践
  • 一天一个设计模式之JS实现——适配器模式
  • ​如何使用QGIS制作三维建筑
  • # Python csv、xlsx、json、二进制(MP3) 文件读写基本使用
  • #AngularJS#$sce.trustAsResourceUrl
  • (1)(1.13) SiK无线电高级配置(五)
  • (1)SpringCloud 整合Python
  • (2009.11版)《网络管理员考试 考前冲刺预测卷及考点解析》复习重点
  • (23)Linux的软硬连接
  • (Matlab)基于蝙蝠算法实现电力系统经济调度
  • (PySpark)RDD实验实战——取最大数出现的次数
  • (Redis使用系列) Springboot 使用redis实现接口Api限流 十
  • (附源码)php新闻发布平台 毕业设计 141646
  • (含react-draggable库以及相关BUG如何解决)固定在左上方某盒子内(如按钮)添加可拖动功能,使用react hook语法实现
  • (免费领源码)Python#MySQL图书馆管理系统071718-计算机毕业设计项目选题推荐
  • (四)JPA - JQPL 实现增删改查
  • (一)Dubbo快速入门、介绍、使用
  • (一)eclipse Dynamic web project 工程目录以及文件路径问题
  • (原創) 如何解决make kernel时『clock skew detected』的warning? (OS) (Linux)
  • .net mvc部分视图
  • .Net 路由处理厉害了
  • .NET 中小心嵌套等待的 Task,它可能会耗尽你线程池的现有资源,出现类似死锁的情况
  • .NET框架设计—常被忽视的C#设计技巧
  • @Bean注解详解
  • @private @protected @public
  • [ vulhub漏洞复现篇 ] Apache APISIX 默认密钥漏洞 CVE-2020-13945
  • [ajaxupload] - 上传文件同时附件参数值