首页 / 算法 / 算法与数据结构基础 - 排序(Sort)
算法与数据结构基础 - 排序(Sort)
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了算法与数据结构基础 - 排序(Sort),小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2444字,纯文字阅读大概需要4分钟。
内容图文
![算法与数据结构基础 - 排序(Sort)](/upload/InfoBanner/zyjiaocheng/738/7c0c2d1458d44d0bb9574299e676953f.jpg)
排序基础
排序方法分两大类,一类是比较排序,快速排序(Quick Sort)、归并排序(Merge Sort)、插入排序(Insertion Sort)、选择排序(Selection Sort)、希尔排序(Shell Sort)、堆排序(Heap Sort)等属于比较排序方法,比较排序方法理论最优时间复杂度是O(nlogn),各方法排序过程和原理见 可视化过程。
另一类是非比较排序,被排序元素框定范围的前提下可使用非比较排序方法,例如桶排序(Bucket Sort)、计数排序(Counting Sort)等,时间复杂度可减少至O(n)。
比较排序方法
快速排序(Quick Sort) 快速选择(Quick Select)是快速排序的衍生引用,常用于求中位数、Kth数字。
相关LeetCode题:
973.?K Closest Points to Origin 题解
插入排序(Insertion Sort)
相关LeetCode题:
归并排序(Merge Sort) 有一项引申应用、计算数组的Inversions,即求数组中满足于a[i] > a[j] 且 i < j 这样条件的对数,详见 Count Inversions in an array | Set 1 (Using Merge Sort)
C++中提供了两个内置的归并排序方法:
merge(l1.begin(), l1.end(), l2.begin(), l2.end(), result.begin());//which stores the merged array in result
inplace_merge(l.begin(), l.middle, l.end());//where array [begin, middle) is merged with array [middle, end).
相关LeetCode题:
148.?Sort List??题解315.?Count of Smaller Numbers After Self 题解
非比较排序方法
桶排序(Bucket Sort) 可视化过程,桶排序也有一些引申应用,例如 LeetCode题目 164. Maximum Gap 利用桶划分取值求两元素间隔最大值。
相关LeetCode题:
1057.?Campus Bikes??题解
计数排序(Counting Sort) 可视化过程
相关LeetCode题:
1030.?Matrix Cells in Distance Order 题解
排序的应用
实际应用中我们不从头实现排序函数、常直接调用库函数完成排序,如C++ STL中常用的sort、partial_sort等。
相关LeetCode题:
349.?Intersection of Two Arrays 题解
350.?Intersection of Two Arrays II 题解
976.?Largest Perimeter Triangle 题解
非典型排序问题
一些问题要求按一定规则对序列进行排序,比如“奇偶奇偶……”奇数、偶数交叠,或 nums[0] <= nums[1] >= nums[2] <= nums[3]……,我称之为非典型排序问题。
这类问题不能用上述排序方法解决,更多是考量对数组元素排布的处理逻辑。
相关LeetCode题:
922.?Sort Array By Parity II 题解
280.?Wiggle Sort??题解
内容总结
以上是互联网集市为您收集整理的算法与数据结构基础 - 排序(Sort)全部内容,希望文章能够帮你解决算法与数据结构基础 - 排序(Sort)所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。