排序
文章平均质量分 73
taesimple
这个作者很懒,什么都没留下…
展开
-
堆排序(heap sort)
堆和堆排序 堆排序结合了合并排序和插入排序的优点,其时间复杂度为O(n*logn),且是一种原地排序算法(在任何时候,数组中只有常数个元素存储在输入数组以外) 堆排序采用了名为“堆”的数据结构,分为大顶堆和小顶堆。堆排序采用了大顶堆,其定义是:一颗完全二叉树,且除根结点外的任意结点的值至多和其父结点的值一样大。小顶堆组织方式刚好相反,其通常用在构造优先队列时使用 为方面起见,实际代码中用数组原创 2011-07-28 10:57:46 · 239 阅读 · 0 评论 -
快速排序(quick sort)
基本概念 快速排序的最差时间性能为O(n^2),期望时间性能为O(n*logn) 快速排序和归并排序一样,都属于分治法,其三个步骤如下 分解(关键步骤):将序列(A[p], ..., A[r])划分成两个(可能空)的子序列(A[p], ..., A[q-1])和(A[q+1], ..., A[r]),使得(A[p], ..., A[q-1])中的任意元素均小于等于A[q],(A[q+1]原创 2011-07-26 19:50:54 · 250 阅读 · 0 评论 -
选择排序(selection sort)
选择排序的时间复杂度为O(n^2) 算法思想:每次遍历当前未排序部分,记录其中最大元素的下标,遍历完成后,将该元素与未排序部分的最后一个元素交换;每次遍历后未排序部分的长度减1 代码如下: void swap(int * a, int * b){ assert(a != NULL); assert(b != NULL); if(a != b){ *a ^= *b; *原创 2012-05-21 22:56:33 · 204 阅读 · 0 评论 -
插入排序(insertion sort)
插入排序的平均时间复杂度和最差时间复杂度均为O(n^2) 插入排序是一种原地排序方法 基本思想: 将序列分为“已排序”和“未排序”的左右两部分,每次对“未排序”部分的首元素排序,具体做法是:从“已排序”部分的尾部向头部扫描,找到合适位置将该元素插入(实际代码实现时,寻找插入位置和后移同时进行),“已排序”部分长度加1,“未排序”部分长度减1。初始化状态为:“已排序”部分长度为1(只包原创 2011-07-27 09:16:45 · 163 阅读 · 0 评论 -
shell排序(shell sort)
基本概念 shell排序又叫缩小增量排序,其基本思路是:使用一个增量序列(h1, h2, ..., hn),其中h1 = 1。对应地有n趟对子序列(子序列由增量决定)的插入排序,第一趟增量为hn,第二趟为hn-1,……,依次递减。当增量为hk时排序结束后应确保对每一个i我们有a[i] ≤ a[i+hk] shell的时间复杂度与增量序列选取有关,目前最优增量序列情况下,时间复杂度约为O(n^1原创 2011-08-30 19:45:12 · 1669 阅读 · 0 评论 -
归并排序(merge sort)
归并排序时间复杂度为O(n*logn),需要和待排序列相同大小的辅助空间,是一种稳定排序 非递归实现的归并排序效率要高得多 归并排序属于分治法的一种,分治法定义为:将原问题划分为n个规模较小而结构与原问题相似的子问题,递归解决这些子问题,然后合并结果,得出原问题的解。因此分治法有以下三个步骤: 分解:将原问题分解为一系列结构相似的子问题递归求解:对子问题递归求解合并(非必须,如二分查找、原创 2011-07-01 13:45:00 · 218 阅读 · 0 评论 -
基数排序(radix sort)
讨论基数排序之前,先来看桶式排序 桶式排序 桶式排序的原理是:利用待排序序列元素的值作为新序列的索引进行插入,完成新序列的建立后,只需对新序列进行遍历即可完成排序(具体遍历过程和新序列元素的值有关) 假设有N个整数的序列,元素的值的范围是0到M-1。现建立一个名为Count的桶序列,长度为M,并初始化为0。于是,Count有M个桶,开始时都是空的。对待排序序列进行遍历,当遍历至原序列原创 2011-07-18 20:41:55 · 683 阅读 · 0 评论 -
冒泡排序(bubble sort)
冒泡排序的时间复杂度为O(n^2),是一种原地排序,是一种稳定排序 冒泡排序的思想是:每趟冒泡将序列中未排序部分的相邻两元素比较交换,确保将其中的最大元素“沉底”,未排序部分的长度每趟减1,第K趟冒泡可将原序列的第K大元素“沉底” 冒泡排序算法思想简单,但效率很低。相比于直接插入排序,虽然时间复杂度均为O(n^2),但冒泡排序的“交换”次数要多很多,因此直接插入排序要优于冒泡排序 代原创 2012-05-21 22:35:49 · 196 阅读 · 0 评论 -
常用排序算法总结
排序方法 平均时间 最坏情况 辅助存储 稳定性 备注 冒泡排序 O(n^2) O(n^2) O(1) 稳定 插入排序 O(n^2) O(n^2) O(1) 稳定 选择排序 O(n^2) O(n^2) O(1) 不稳定 快速排序 O(n*logn) O(n^2) O(logn) ~ O(n) 不稳定原创 2012-05-22 10:20:40 · 277 阅读 · 0 评论