关于sort,一篇就够

本文详细介绍了STL sort算法,包括其概念、适用场景、底层思想,如快速排序与插入排序的结合,以及SGI STL sort的源码分析,强调了在特定情况下的优化策略,如三点中值选择和内省式排序。

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

    
• 概念


        STL sort有SGI和RW两个版本,两者大同小异,本文讲解的是SGI版本,RW感兴趣自行了解。
    
        头文件:#include<algorithm>


        STL 所提供的各种算法中,sort()是最复杂、最庞大的一个。这个算法接受两个随机存取迭
代器(Random Access Iterators),然后将区间内的所有元素从小到大排序。


        这个算法有两个重载:
        ① 直接传入两个随机存取迭代器即可;
        ② 允许用户指定一个比较器(可以是仿函数、结构体、lambda表
        达式、函数指针),使得自定义类型也可以用sort()。



• 适用场景

        Sort() 第一个重载只适用于STL中的 vector、deque

        由于 STL 所有的关系型容器的底层结构是RB-tree,都拥有自动排序的功能。所以不需要sort()。
        至于序列式容器中的stack,queue都有特别的出口和入口,不允许用户对元素进行随意移动。
        而vector、deque和list,因为list的迭代器属于双向移动迭器(Bidirectioinal Iterator),slist的迭代器属于单向移动迭代器(Forward iterator),所以都不适用sort()算法。
        vector、deque的迭代器属于Random Access Iterator,适用sort算法。



• 底层思想

        sort算法大致思想为,在数据量大时采用Quick Sort,分段递归排序。一旦分段后的数据量
小于某个门槛,为了避免Quick Sort递归的层数过多,就改用Insertion Sort。如果递归层数过深,
还会改用Heap Sort。

        Insertion Sort算法的时间复杂度虽然为O(N^2),但是当数据量很少时࿰

Pandas 是一个强大的 Python 库,专用于数据处理和分析。它提供了一种高效、灵活的方式来操作和管理数据集,并支持一系列数据结构如 Series 和 DataFrame。 ### 什么是 Series? Series 类似于一维数组,可以包含任何类型的条目,包括数字、字符串、日期等。每个元素都有一个对应的索引值,这使得对数据进行基于位置的操作变得简单易行。 ### 什么是 DataFrame? DataFrame 可以视为二维表格,类似于 SQL 数据库中的表或 Excel 的工作表。它可以容纳多种类型的数据并存储在不同的列中,而行则代表不同的观测结果或记录。DataFrame 提供了丰富的函数来进行数据清洗、转换以及数据分析。 ### 基本操作: #### 加载数据: ```python import pandas as pd # 从 CSV 文件加载数据 data = pd.read_csv('example.csv') ``` #### 查看数据概览: ```python print(data.head()) # 显示前五行 print(data.describe()) # 描述性统计信息 ``` #### 按条件筛选: ```python filtered_data = data[data['column_name'] > value] ``` #### 数据排序: ```python sorted_data = data.sort_values(by='column_name', ascending=False) ``` #### 数据分组与聚合: ```python grouped = data.groupby('category_column').sum() # 根据类别求和 ``` #### 合并数据框: ```python combined_data = pd.concat([df1, df2], axis=0) # 横向合并 merged_df = pd.merge(df1, df2, on='id') # 内连接合并 ``` ### 学习 Pandas 的资源: 1. **官方文档**:访问 [pandas.dev](https://pandas.pydata.org/pandas-docs/stable/),这里有详细的操作指南、API 文档和示例代码。 2. **教程网站**:[Real Python](https://realpython.com/) 和 [DataCamp](https://www.datacamp.com/courses/intro-to-pandas-in-python) 提供了全面的学习路径,适合初学者到高级用户。 3. **在线课程**:Coursera、Udemy 等平台上有专门针对 Pandas 的课程,涵盖了基础到进阶的所有内容。 4. **社区与论坛**:加入如 Stack Overflow 或者 r/pandas 在 Reddit 上的讨论区,可以在遇到问题时获得即时的帮助和支持。 通过以上基本知识的学习,你可以有效地利用 Pandas 进行数据预处理、探索性数据分析(EDA)、建模和其他数据分析任务。不断实践和应用是掌握 Pandas 最有效的方式。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值