![](https://img-blog.csdnimg.cn/20201014180756930.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
排序算法
文章平均质量分 75
曲小鑫
我的学习笔记
展开
-
归并和归并排序
归并操作:是将两个有序独立的文件合并成为一个有序文件的过程。归并排序:和快速排序的过程相反,它是两个递归调用(排序子文件)后是一个归并的过程。 快速排序时,先分解成两个子问题后是两个递归调用(排序子文件)的过程。归并操作1 基本的两路归并2 抽象原位归并归并排序1 自顶向下的归并排序2 自底向上的归并排序3 归并排序的性能特征归并排序的链表实现归并排序与快速排序对比1. 归并原创 2015-03-29 18:22:33 · 1441 阅读 · 0 评论 -
单向链表排序:快速排序和归并排序
归并排序改变链接快速排序改变链接快速排序改变节点值所有源码和测试函数对单向链表的排序有2种形式,只改变节点的值 和 只改变链接// 节点struct ListNode { int val; ListNode* next; ListNode(int v, ListNode* n = NULL) { val = v; next = n;原创 2015-08-29 15:22:36 · 5593 阅读 · 0 评论 -
线性排序之基数排序,桶排序,计数排序
基数排序计数排序桶排序基数排序,桶排序,计数排序是三种线性排序方法,突破了比较排序的O(nlogn)的限制。但是只适用于特定的情况。基数排序以下为维基百科的描述: 基数排序 : 将所有待比较数值(正整数)统一为同样的数位长度,数位较短的数前面补零。然后,从最低位开始,依次进行一次排序。这样从最低位排序一直到最高位排序完成以后,数列就变成一个有序序列。 基数排序的方式可以采用L原创 2015-07-20 11:03:48 · 1870 阅读 · 0 评论 -
排序算法总结
本文将给出六大经典排序的实现。 简单排序算法:冒泡,插入,选择 改进排序算法:快排,归并,堆排以下排序用到的交换函数:void swap(int &A, int &B) { int temp = A; A = B; B = temp;}1. 冒泡排序2个相邻的元素相互比较,不满足顺序则交换;每遍历一次数组,使一个元素处于最终位置。 时间复杂度O(n2)O(n^2) 空间复杂度O(1)原创 2015-07-28 15:51:53 · 1012 阅读 · 0 评论 -
优先队列和堆排序
优先队列和堆排序标签(空格分隔): 排序算法 数据结构优先队列和堆排序优先队列堆1 基于堆的算法初始化自底向上堆化自顶向下堆化插入删除一项2 堆排序优先队列全部代码1 优先队列普通的队列是一种先进先出的数据结构,元素在队列尾追加,而从队列头删除。在优先队列中,元素被赋予优先级。当访问元素时,具有最高优先级的元素最先删除。优先队列具有最高级先出 (largest-in,first-原创 2015-04-08 09:55:00 · 1546 阅读 · 0 评论 -
快速排序(1)基本算法实现
1. 基本算法1.1 算法原理快速排序是一种分治排序算法。它将数组划分为左右两个部分,然后分别对这两部分排序。关键在划分的过程中,它将重排数组,使的以下条件成立:对于某个划分元素指针 i ,a[i]将处于排序后数组的最终的位置上a[l],……,a[i-1] 中的元素都比a[i]小a[i+1],……,a[r] 中的元素都比a[i]大我们通过划分完成排序,然后递归的调用该方法处理子文件,每一次划原创 2015-03-18 16:15:30 · 1037 阅读 · 0 评论 -
快速排序(3)的应用:选择--用于选出第K小的元素
快速排序(3)的应用:选择–用于选出第K小的元素标签(空格分隔): 排序算法本文描述了一个快速排序的应用,用快速排序快速的选出数据中第k小的文件(元素)。一个与排序有关但又不需要完全排序的应用是找出一组数的中间数的操作。寻找中间元素时选择操作的一个特例,即选择一组数中的第kk个最小元素。一种方法是对数据进行排序,但我们可以使用快速排序的划分过程做的更好。算法过程(寻找第k小的元素)快速排序的划分,原创 2015-03-18 18:16:02 · 1311 阅读 · 0 评论 -
(转)如何分析分治型算法性能
主定理 Master Method :在《算法导论》被提出假设有递推关系式T(n)=aT(nb)+f(n)T(n) = a \; T\left(\frac{n}{b}\right) + f(n),其中 a≥1, b>1a \geq 1 \mbox{, } b > 1 其中,nn为问题规模,aa为递推的子问题数量,n/bn/b为每个子问题的规模(假设每个子问题的规模基本一样),f(n)f(n)为递推转载 2015-03-18 16:15:16 · 647 阅读 · 0 评论 -
快速排序(2)算法改进--小的子文件、三者取中、重复关键字三路划分
标签(空格分隔): 排序算法 1. 小的子文件由于快速排序会递归的调用自身的许多小文件,因而要对小的子文件尽可能使用高效的算法 三者取其中快速排序重复关键字-三路划分快速排序原创 2015-03-18 18:13:05 · 1921 阅读 · 0 评论 -
基本排序(一):冒泡排序算法的三种基本实现
最基本的冒泡排序算法的实现以下助记码和图片来自维基百科,第三种不是严格意义上的冒泡(其不是相邻2个相互比较)== 助记码 == i∈[0,N-1) //循环N-1遍 j∈[0,N-1-i) //每遍循环要处理的无序部分 swap(j,j+1) //两两排序(升序/降序) i∈[N-1,0原创 2014-12-31 16:11:56 · 2604 阅读 · 1 评论 -
基本排序(二):选择排序 - 不断选出剩余数组中最小的元素
选择排序过程:首先,选出数组中最小的元素,将它与数组中第一个元素交换,然后找出次小的元素,并将它与数组中第二个元素交换。。。直至整个数组排序完成。即通过不断选出剩余数组中最小的元素实现。选择排序时间复杂度:O(N^2)元素大,关键字小原创 2015-03-07 19:36:58 · 1454 阅读 · 0 评论 -
基本排序(五):基本排序算法的总结
基本排序的基础如果一个基本的排序算法不比数据处理,如数据读入和读出慢,就没有必要寻找一个更快的算法。如果被排序的文件适合放在内存中,则排序方法称为“内部排序”;从磁盘上对文件排序称为“外部排序”。区别是内部排序可以很容易的访问任何元素,但是外部排序必须顺序访问元素,至少在大的数据块是如此。排序程序访问元素的方式:通过关键字进行比较、直接访问整个元素移动;排序函数都包过3个参数:数组、带排序字原创 2015-03-13 14:19:26 · 795 阅读 · 0 评论 -
基本排序(三):插入排序 和 希尔排序- 从后向前扫描,比正操作元素大的逐步移位
1. 插入排序插入排序(Insertion Sort)工作原理(维基百科) 通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置插入。插入排序实现上,通常采用in-place排序(即只需用到O(1)的额外空间的排序),因而在从后向前扫描过程中,需要反复把已排序元素逐步向后移位,为最新元素提供插入空间。算法描述:一般来说,插入排序都采用in-place在数组上实现。具体算法描述如原创 2015-03-09 10:23:06 · 2207 阅读 · 1 评论 -
基本排序(四):索引指针排序、链表排序、关键字排序
1. 索引和指针排序:因为元素的数量或者数据量巨大等原因,我们不希望频繁移动要排序的元素。因此,不移动元素的排序方法是维持一个索引数组或者索引指针,而排序的目标就是重排索引数组或指针。 2. 链表排序:排序对象为链表形式的数据3.关键字排序:具有相同关键字的数据原创 2015-03-13 14:14:04 · 2833 阅读 · 0 评论 -
快速排序分析
In general, the code you have is neat, and easy to follow. The QuickSort algorithm is relatively traditional, and the pieces I expect to see are about where I expect them to be.Let's go through th转载 2015-08-04 16:09:24 · 537 阅读 · 0 评论