![](https://img-blog.csdnimg.cn/20201014180756913.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
sort
happylife1527
这个作者很懒,什么都没留下…
展开
-
排序--归并排序
http://www.cnblogs.com/luweiseu/archive/2012/07/14/2591653.html.7 归并排序在前一节中我们研究了快速排序以及相关的改进方法。本节将介绍另一种基于归并(split-merge)过程的算法。归并算法运用了分治算法和自底向上方法的思想。在快速排序法文件划分为两个子文件,其中划分点的位置被最终确定;而归并排序的过程与之相反转载 2012-08-29 22:05:25 · 316 阅读 · 0 评论 -
计数排序
曾经在一个不是很正式的面试中,被问到一个问题:怎么对1亿个数字进行排序?当时没加思索就答:快排。毕竟以有限的知识,只能想到伟大的快排了。又被追问,在1亿的数量级下,lgn也是不小的开支,况且是乘,对吧?最后知道答案是计数排序,那疑问就是,它真的有这么快吗?下面就开始美好的学习吧。 首先,我们将比较排序抽象的视为决策树,一颗决策树是满二叉树(in fact,显然不是,因为只能保证除叶子节点外转载 2012-09-04 22:33:15 · 610 阅读 · 0 评论 -
排序
十四、排序(Sort)这可能是最有趣的一节。排序的考题,在各大公司的笔试里最喜欢出了,但我看多数考得都很简单,通常懂得冒泡排序就差不多了,确实,我在刚学数据机构时候,觉得冒泡排序真的很“精妙”,我怎么就想不出呢?呵呵,其实冒泡通常是效率最差的排序算法,差多少?请看本文,你一定不会后悔的。1、冒泡排序(Bubbler Sort)前面刚说了冒泡排序的坏话,但冒泡排序也有其优点,那就是好理解转载 2012-09-04 22:48:39 · 890 阅读 · 0 评论 -
冒泡排序(Bubble Sort)
无论你学习哪种编程语言,在学到循环和数组时,通常都会介绍一种排序算法来作为例子,而这个算法一般就是冒泡排序。并不是它的名称很好听,而是说这个算法的思路最简单,最容易理解。因此,哪怕大家可能都已经学过冒泡排序了,我们还是从这个算法开始我们的排序之旅。 冒泡排序(Bubble Sort)一种交换排序,它的基本思想是:两两比较相邻记录的关键字,如果反序则交换,直到转载 2012-08-24 10:33:45 · 751 阅读 · 0 评论 -
快速排序(Quick Sort)
1、算法思想 快速排序是C.R.A.Hoare于1962年提出的一种划分交换排序。它采用了一种分治的策略,通常称其为分治法(Divide-and-ConquerMethod)。(1) 分治法的基本思想 分治法的基本思想是:将原问题分解为若干个规模更小但结构与原问题相似的子问题。递归地解这些子问题,然后将这些子问题的解组合为原问题的解。(2)快速排序的基本思想转载 2012-08-16 22:41:42 · 446 阅读 · 0 评论 -
希尔排序(上)
http://www.cnblogs.com/cj723/archive/2011/04/19/2021613.html9.6.1 变不可能为可能 给大家出一道智力题。请问“VII”是什么? 嗯,很好,它是罗马数字的7。现在我们要给它加上一笔,让它变成8(VIII),应该是非常简单,只需要在右侧加一竖线即可。 现在我请大家试着对罗马数字9,转载 2012-08-20 15:41:35 · 1103 阅读 · 0 评论 -
希尔排序(下)
http://www.cnblogs.com/cj723/archive/2011/04/20/2021648.html好了,为了能够真正弄明白希尔排序的算法,我们还是老办法——模拟计算机在执行算法时的步骤还研究算法到底是如何进行排序的。 希尔排序算法代码如下。 1 void ShellSort(SqList *L) 2 { 3 int i,j转载 2012-08-20 15:46:26 · 467 阅读 · 0 评论 -
直接插入排序(Insertion Sort)
插入排序(Insertion Sort)的基本思想是:每次将一个待排序的记录,按其关键字大小插入到前面已经排好序的子文件中的适当位置,直到全部记录插入完成为止。 本节介绍两种插入排序方法:直接插入排序和希尔排序。直接插入排序基本思想1、基本思想 假设待排序的记录存放在数组R[1..n]中。初始时,R[1]自成1个有序区,无序区为R[2..n]。从i=2起直至转载 2012-08-16 14:32:26 · 306 阅读 · 0 评论 -
归并排序(Merge Sort)
归并排序(Merge Sort)是利用"归并"技术来进行排序。归并是指将若干个已排序的子文件合并成一个有序的文件。两路归并算法1、算法基本思路 设两个有序的子文件(相当于输入堆)放在同一向量中相邻的位置上:R[low..m],R[m+1..high],先将它们合并到一个局部的暂存向量R1(相当于输出堆)中,待合并完成后将R1复制回R[low..high]中。(1转载 2012-08-16 22:38:44 · 622 阅读 · 0 评论 -
逆向分析之LSD基数排序 ;逆向之循环数组队列
逆向分析之LSD基数排序 版本:Release 优化选项:O2调试工具:OD源码:[cpp] view plaincopyprint?//LSD基数排序(桶排序,模拟队列实现) #include #include #include #define MAX_SIZE 11 //PS:set nodes number转载 2012-09-18 22:45:49 · 815 阅读 · 0 评论 -
逆向之KMP算法 ;逆向之hanoi塔
逆向之KMP算法 版本:Release优化选项:O2调试工具:OD源码:[cpp] view plaincopyprint?#include #include #include #define MAX_SIZE 100 char fail[MAX_SIZE]; void failure(char* pat)转载 2012-09-18 22:47:00 · 460 阅读 · 0 评论 -
逆向之hash算法 ,逆向之选择排序 ,逆向之快速排序
逆向之hash算法 此算法为hash中比较简单的线性探测法,代码优化选项OD(无)顺便说句,这些算法实现大多会拿我在学数据结构的时候自己实现的或者书上的,所以风格编码肯定不能和百度到的那些比,权当练练手,不过物尽其用吧,也不枉费当时特意把这些代码保存下来,嘿嘿以下为C的算法代码:[cpp] view plaincopyprint?//线性探测 #转载 2012-09-18 22:42:03 · 1287 阅读 · 0 评论 -
逆向之堆排序 ,逆向之二路归并排序
逆向之堆排序 版本:Release 优化选项:O2调试工具:OD源码:[cpp] view plaincopyprint?//堆排序 #include #include #include #define MAX_SIZE 10 #define SWAP(x,y,t) ((t)=(x),(x)=(y),(y转载 2012-09-18 22:44:06 · 683 阅读 · 0 评论 -
基数排序、桶排序
以前学严蔚敏老师的数据结构的时候,看到基数排序,只是当按位排序,至于最终能不能排出所有的正确值,还是不清楚的,总感觉,就是按照个需要的关键字去排下,最终会和的部分还是没去细心注意的。 基数排序是一种分配排序,其基本思想是:排序过程无须比较关键字,而是通过“分配”和“收集”过程来实现排序。它们的时间复杂度可达到线性O(n)。基数排序所做的事情,是对N位分别进行排序。从直觉上来看,人转载 2012-09-04 22:31:45 · 1042 阅读 · 0 评论 -
三种线性排序算法:计数排序、桶排序与基数排序
[非基于比较的排序]在计算机科学中,排序是一门基础的算法技术,许多算法都要以此作为基础,不同的排序算法有着不同的时间开销和空间开销。排序算法有非常多种,如我们最常用的快速排序和堆排序等算法,这些算法需要对序列中的数据进行比较,因为被称为基于比较的排序。基于比较的排序算法是不能突破O(NlogN)的。简单证明如下:N个数有N!个可能的排列情况,也就是说基于比较的排序算法的判定树有N!转载 2012-09-04 22:27:48 · 563 阅读 · 0 评论 -
归并排序(下)
归并排序复杂度分析 我们来分析一下归并排序的时间复杂度,一趟归并需要将SR[1]~SR[n]中相邻的长度为h的有序序列进行两两归并。并将结果放到TR1[1]~TR1[n]中,这需要将待排序序列中的所有记录扫描一遍,因此耗费O(n)时间,而由完全二叉树的深度可知,整个归并排序需要进行⌈log2n⌉趟,因此,总的时间复杂度为O(nlogn),而且这是归并排序算法中最好、最坏、平均的时转载 2012-08-20 16:33:41 · 609 阅读 · 0 评论 -
排序--选择排序,插入排序,冒泡排序,shell排序,快速排序(递归,迭代,改进版本),归并排序
排序排序是使数据有序化的操作。这里的数据包括关键字和其它信息项,关键字用来控制排序。排序使得数据有序化,实际上是使数据按关键字的某个定义明确的顺序规则排列。如果被排序的数据在内存中,那么这个排序方法就叫做内排序;如果数据来自磁盘则叫做外部排序。其中内部排序能很容易访问任何数据项,而外排序必须顺序地访问数据项。本章我们主要讨论内部排序。对于内部排序,数据在内存中的存储方式分为数组和链表两种。转载 2012-08-29 22:15:56 · 1282 阅读 · 0 评论 -
希尔排序(Shell Sort)
希尔排序(Shell Sort)是插入排序的一种。因D.L.Shell于1959年提出而得名。希尔排序基本思想 基本思想: 先取一个小于n的整数d1作为第一个增量,把文件的全部记录分成d1个组。所有距离为dl的倍数的记录放在同一个组中。先在各组内进行直接插人排序;然后,取第二个增量d21重复上述的分组和排序,直至所取的增量dt=1(dtt-l21),即所有记录放在同一转载 2012-08-16 14:31:46 · 366 阅读 · 0 评论 -
快速排序(上)
http://www.cnblogs.com/cj723/archive/2011/04/27/2029993.html快速排序介绍 终于我们的高手要登场了,如果将来你工作后,你的老板要让你写个排序算法,而你会的算法中竟然没有快速排序,我想你还是不要声张,偷偷去把快速排序算法找来敲进电脑,这样至少你不至于被大伙儿取笑。 事实上,不论是C++ STL、Java转载 2012-08-20 16:34:24 · 537 阅读 · 0 评论 -
对快速排序的简单分析
开篇在实际的过程中,总需要对一些数据进行排序,在众多的排序算法中,快速排序是较为常用的排序算法之一。而网上对于快速排序的中文资料还不是很全。写这篇博文主要记录一些自己对于快速排序的了解,以及对快速排序的性能的分析。我将在这里记录下我对快速排序的认识和学习过程 ,用尽可能简单明了的叙述来阐述我的理解。快速排序基于算法中很重要的思想是 分治。所以会先介绍一下分治思想,然后对算法原理进行介绍,接转载 2012-08-20 15:22:26 · 511 阅读 · 0 评论 -
箱排序(Bin Sort)
分配排序的基本思想:排序过程无须比较关键字,而是通过"分配"和"收集"过程来实现排序.它们的时间复杂度可达到线性阶:O(n)。箱排序(Bin Sort)1、箱排序的基本思想 箱排序也称桶排序(Bucket Sort),其基本思想是:设置若干个箱子,依次扫描待排序的记录R[0],R[1],…,R[n-1],把关键字等于k的记录全都装入到第k个箱子里(分配),然后按序号依次转载 2012-08-16 22:36:19 · 560 阅读 · 0 评论 -
堆排序
堆排序,建立在堆这种结构上。一般的堆可以建立在数组上,但也可以用链表结构来表示。有序堆满足,每个节点的键值要比它所有孩子的键值都大。[cpp:showcolumns] view plaincopyprint?·········10········20········30········40········50········60········70········80·转载 2012-08-16 15:09:37 · 365 阅读 · 0 评论 -
基数排序(Radix Sort)
基数排序(Radix Sort)是对箱排序的改进和推广。1、单关键字和多关键字 文件中任一记录R[i]的关键字均由d个分量 构成。若这d个分量中每个分量都是一个独立的关键字,则文件是多关键字的(如扑克牌有两个关键字:点数和花色);否则文件是单关键字的, (0≤j 多关键字中的每个关键字转载 2012-08-16 22:32:49 · 542 阅读 · 0 评论 -
堆排序(上)
http://www.cnblogs.com/cj723/archive/2011/04/21/2024261.html堆结构介绍 我们前面讲到简单选择排序,它在待排序的n个记录中选择一个最小的记录需要比较n-1次。本来这也可以理解,查找第一个数据需要比较这么多次正常的,否则如何知道它是最小的记录。 可惜的是,这样的操作并没有把每一趟的比较结果保存下来,在后转载 2012-08-20 16:08:50 · 450 阅读 · 0 评论 -
堆排序(下)
http://www.cnblogs.com/cj723/archive/2011/04/22/2024269.html堆排序算法 堆排序(Heap Sort)就是利用堆(假设利用大顶堆)进行排序的方法。它的基本思想是,将待排序的序列构造成一个大顶堆。此时,整个序列的最大值就是堆顶的根结点。将它移走(其实就是将其与堆数组的末尾元素交换,此时末尾元素就是最大值),然后将剩余的n转载 2012-08-20 16:11:55 · 789 阅读 · 0 评论 -
归并排序(上)
http://www.cnblogs.com/cj723/archive/2011/04/25/2026751.html归并排序介绍 前面我们讲了堆排序,因为它用到了完全二叉树,充分利用了完全二叉树的深度是⌊log2n⌋+1的特性,所以效率比较高。不过堆结构的设计本身是比较复杂的,老实说,能想出这样的结构就挺不容易,有没有更直接简单的办法利用完全二叉树来排序呢?当然是有。转载 2012-08-20 16:33:09 · 891 阅读 · 0 评论 -
直接插入排序算法
扑克牌是我们几乎每个人都可能从事过的游戏。而最基本的扑克玩法都是一边摸牌,一边理牌。假如我们拿到了这样一手牌,如图9-5-1。啊,似乎是同花顺呀,别急,我们得理一理顺序才知道是否是真的同花顺。请问,如果是你,应该如何理牌呢? 应该说,哪怕你是第一次玩扑克牌,只要认识这些数字,理牌的方法都是不用教的。将3和4移动到5的左侧,再将2移动到最左侧,顺序就算转载 2012-08-24 10:26:48 · 474 阅读 · 0 评论 -
简单选择排序算法
爱炒股票短线的人,总是喜欢不断的买进卖出,想通过价差来实现盈利。但通常这种频繁操作的人,即使失误不多,也会因为操作的手续费和印花税过高而获利很少。还有一种做股票的人,他们很少出手,只是在不断的观察和判断,等到时机一到,果断买进或卖出。他们因为冷静和沉着,以及交易的次数少,而最终收益颇丰。 冒泡排序的思想就是不断的在交换,通过交换完成最终的排序,这和做股票短线频繁操作的人是类似的转载 2012-08-24 10:29:18 · 554 阅读 · 0 评论 -
快速排序(下)
快速排序优化 刚才讲的快速排序还是有不少可以改进的地方,我们来看一些优化的方案。1.优化选取枢轴 如果我们选取的pivotkey是处于整个序列的中间位置,那么我们可以将整个序列分成小数集合和大数集合了。但注意,我刚才说的是“如果……是中间”,那么假如我们选取的pivotkey不是中间数如何呢?比如我们前面讲冒泡和简单选择排序一直用到的数组{9,1,5,8,3转载 2012-08-20 16:34:59 · 698 阅读 · 0 评论