c++;排序
一蓑烟雨任平生灬
学生
展开
-
STL std::sort 源码分析
转载自http://feihu.me/blog/2014/sgi-std-sort/ 最近在看sort源码,看到这篇博文很好,转发作为记录,转载侵权联系我删除 背景 在校期间,为了掌握这些排序算法,我们不得不经常手动实现它们,以加深对其的理解。然而这些算法实在是太常用了,我们不太可能在每次需要时都手动来实现,不管是性能还是安全性都得不到保证。因此这些算法被包含进了很多语言的标准库里,在C语言...转载 2019-12-10 13:55:23 · 373 阅读 · 0 评论 -
插入排序算法
对于插入排序算法来说,它是一种比较排序的一种。以后的博文中我会陆续介绍其余的几种排序算法。 时间复杂度O(n^2), 空间复杂度O(1) 排序时间与输入有关:输入的元素个数;元素已排序的程度。 最佳情况,输入数组是已经排好序的数组,运行时间是n的线性函数; 最坏情况,输入数组是逆序,运行时间是n的二次函数。 核心代码: void insertionSort(int原创 2017-06-18 16:35:35 · 235 阅读 · 0 评论 -
归并(合并)排序
归并排序,一种比较排序,通过对数组中的元素进行比较得出排序结果。 时间复杂度 O(nlogn), 空间复杂度O(n) +O(logn) 排序时间与输入无关,最佳情况,最坏情况都是如此, 稳定。 原理: 可以将数组分成二组。依次类推,当分出来的小组只有一个数据时,可以认为这个小组组内已经达到了有序,然后再合并相邻的二个小组就可以了。这样通过先递归的分解数列,再合并数原创 2017-06-18 16:58:39 · 1028 阅读 · 1 评论 -
冒泡排序
冒泡排序属于比较排序的一种。 时间复杂度O(n^2), 空间复杂度O(1), 稳定,因为存在两两比较,不存在跳跃。排序时间与输入无关,最好,最差,平均都是O(n^2)。 核心代码: void bubbleSort(int aarraytoSort[]) { for(int i=0;i<arraytoSort.length-1;i++){原创 2017-06-20 15:54:28 · 612 阅读 · 0 评论 -
堆排序
时间复杂度 O(nlogn), 空间复杂度O(1). 从这一点就可以看出,堆排序在时间上类似归并,但是它又是一种原地排序,时间复杂度小于归并的O(n+logn) 排序时间与输入无关,最好,最差,平均都是O(nlogn). 不稳定 堆排序借助了堆这个数据结构,堆类似二叉树,又具有堆积的性质(子节点的关键值总小于(大于)父节点) 堆排序包括两个主要操作: 保持堆的性质heap原创 2017-06-20 16:05:49 · 288 阅读 · 0 评论 -
快速排序
比较排序的一种,其实快速排序是基于 “二分” 的思想。快速排序之所比较快,每次交换是跳跃式的。每次排序的时候设置一个基准点,将小于等于基准点 的数全部放到基准点的左边,将大于等于基准点的数全部放到基准点的右边。 快速排序: 时间复杂度 O(nlogn) 空间复杂度O(logn) 不稳定 【两个时间复杂度O(nlogn) 的排序算法都不稳定】 由于关键字的比较和交换是跳跃进行的,原创 2017-06-21 20:02:43 · 208 阅读 · 0 评论 -
选择排序
时间复杂度O(n^2), 空间复杂度O(1) 排序时间与输入无关,最佳情况,最坏情况都是如此, 不稳定。 代码: void sort(int arraytoSort){ for(int i = 0; i<arraytoSort.length-1; i++){ int min = i; int temp;原创 2017-06-23 15:29:24 · 177 阅读 · 0 评论 -
计数排序
非比较排序: ,计数排序,基数排序,桶排序,时间复杂度能够达到O(n). 这些排序为了达到不比较的目的,对数据做了一些基本假设(限制)。如计 数排序假设数据都[0,n] 范围内,且范围较小;基数排序假设数据都[0,n] 范围内;也是桶排序假设数据均匀独立的分布。 而且,非比较排序的空间要求比较高,用空间换取时间吧。当我们的待排序数组具备一些基数排序与桶排序要求的特性,且空间上又比较富裕原创 2017-06-23 15:35:30 · 198 阅读 · 0 评论 -
基数排序,桶排序
计数排序和桶排序都只是在研究一个关键字的排序,现在我们来讨论有多个关键字的排序问题。 基数排序 方法; 从最低有效关键字开始排序,称为 LSD(Least Significant Dight)排序 。首先对所有的数据按照次要关键字排序,然后对所有的数据按照首要关键字排序。要注意的是,使用的排序算法必须是稳定的,否则就会取消前一次排序的结果。由于不需要分堆对每堆单独排序。 通常,基数原创 2017-06-23 15:51:46 · 290 阅读 · 0 评论