您好、欢迎来到现金彩票网!
当前位置:秒速牛牛投注 > 桶链算法 >

排序算法5

发布时间:2019-06-07 07:56 来源:未知 编辑:admin

  这是《漫谈经典排序算法系列》第五篇,给出了三种线性时间排序,分别是计数排序、基数排序、桶排序

  前面四篇博客中,所有的排序算法都存在比较,都可以称为”比较排序“。比较排序的下界为o(nlogn)。那么有没有时间复杂度为o(n)的线性时间排序算法呢?计数排序便是很基础的一种线性时间排序,它是基数排序的基础。基本思想是:对每一个元素x,确定小于x的元素个数,就可以把x直接放到它在有序序列中的位置上。过程描述:假设待排序序列a中值的范围[0,k],其中k表示待排序序列中的最大值。首先用一个辅助数组count记录各个值在a中出现的次数,比如count[i]表示i在a中的个数。然后依次改变count中元素值,使count[i]表示a中不大于i的元素个数。然后从后往前扫描a数组,a中的元素根据count中的信息直接放到辅助数组b中。最后把有序序列b复制到a。

  从代码来看,计数排序有5个for循环,其中三个时间是n,两个时间是k。所以总时间T(3n+2k),时间复杂度o(n+k),不管是在最坏还是最佳情况下,此时间复杂度不变.此外,计数排序是稳定的,辅助空间n+k,这个空间是比较大的,计数排序对待排序序列有约束条件(如前面我们假设待排序序列a中值的范围[0,k],其中k表示待排序序列中的最大值),元素值需是非负数,k太大的话会大大降低效率。这里要注意的是 “扫描a数组把各个元素放在有序序列相应的位置上” 这步为什么要从后往前扫描a数组呢?大家想一想计数排序的过程就知道,因为从前扫描导致计数排序不稳定,前面说了,计数排序是基数排序的基础,所以它的稳定性直接影响到基数排序的稳定。

  在计数排序中,当k很大时,时间和空间的开销都会增大(可以想一下对序列{8888,1234,9999}用计数排序,此时不但浪费很多空间,而且时间方面还不如比较排序)。于是可以把待排序记录分解成个位(第一位)、十位(第二位)....然后分别以第一位、第二位...对整个序列进行计数排序。这样的话分解出来的每一位不超过9,即用计数排序序列中最大值是9.

  基数排序时间T(n)=d*(2k+3n),其中d是记录值的位数,(2k+3n)是每一趟计数排序时间,上文分析过了,k不超过9,d的值一般也很小,k、d都可以看成是一个很小的常数,所以时间复杂度o(n)。最坏最佳情况并不改变时间复杂度。基数排序是稳定的。辅助空间同计数排序k+n.

  同计数排序一样,桶排序也对待排序序列作了假设,桶排序假设序列由一个随机过程产生,该过程将元素均匀而独立地分布在区间[0,1)上。基本思想是:把区间[0,1)划分成n个相同大小的子区间,称为桶。将n个记录分布到各个桶中去。如果有多于一个记录分到同一个桶中,需要进行桶内排序。最后依次把各个桶中的记录列出来记得到有序序列。

  当记录在桶中分布均匀时,即每个桶只有一个元素,此时时间复杂度o(n)。因此桶排序适合对很少重复的记录排序。辅助空间2n。桶排序是稳定的排序,实现比较复杂。

  写在前面:因为网络上有很多篇讲排序算法的,所以这里就不详细讲了,只作为参考和自己查阅当然了,虽然篇幅也会短很多,但部分重点和要点还在八种排序算法分别是:①选择排序;②冒泡排序;③插入排序;④快速排序;...博文来自:加载中...

  本文将在可视化算法一(传送门)的基础上实现插入排序,其实就是多添加了一个实现插入排序的函数,再将Widget里的构造函数中的goBubble更换成goInsertion就可以了。先介绍一下插入排序,先...博文来自:apple的博客

  /*实验六:排序算法应用内容:给出n个学生的考试成绩表,每条记录由学号、姓名和分数和名次组成,设计算法完成下列操作:(1)设计一个显示对学生信息操作的菜单函数如下所示:****************...博文来自:cqwoniu的博客

  1、排序算法排序算法(英语:Sortingalgorithm)是一种能将一串数据依照特定顺序进行排列的一种算法。算法分类:1.1、冒泡排序冒泡排序(BubbleSort)是一种简单的排序算法。它重复地...博文来自:叶强的博客

  概述在算法系列(四)排序算法中篇--归并排序和快速排序一文中,我们介绍了归并排序和快速排序,最坏的情况下,最快的排序算法的时间复杂度是O(nlogn),是否有更好的算法呢?到目前为止,没有特殊的规则,...博文来自:robert的专栏

  本文总结了一下五种常见的排序算法:选择排序、冒泡排序、插入排序、快速排序、堆排序。为方便理解记忆,以升序为例,先通过图形化排序过程来解释排序算法的实现原理,然后通过Java代码来实现排序。...博文来自:刘季玉的博客

  计数排序,基数排序,桶排序,寻找第k个最大最小值算法-----java实现博文来自:成长

  3.写一个二维数组排序算法函数,能够具有通用性,可以调用php内置函数博文来自:青春已被放纵了 的博客

  0.前言:在大数据研究的路上,我们总要对一些很大的数据进行各种各样的操作。比如说对数据排序,比如说对数据统计,比如说对数据计算。而在大量的数据面前,我们总是束手无策,因为我们无法在限定时间的情况下,在...博文来自:大鱼

  分而治之是设计高效算法的一个重要思想。本文主要总结一下分治思想在排序算法中的运用。排序在商业数据处理和现代科学计算中有着重要的地位,它能够应用于事物处理、组合优化、天体物理学、分子动力学、语言学、基因...博文来自:丶legend的博客

  后面在比较不同排序算法效率的时候,可能会用到一万、十万、百万这种量级的数组,对于这种数组,不能手动生成。为此写一个新的方法生成随机数组,以及其他测试相关的辅助方法。SortTestHelper:p...博文来自:Tenacity

  内部排序算法的性能分析 一  需求分析1) 对起泡排序、直接排序、简单选择排序、快速排序、希尔排序、堆排序算法进行比较;2) 排序表中数据数目不小于100 ,表中数据随机产生,至少用5组不同数据集作比...博文来自:西_北

  排序算法写了几遍,总是过段时间就忘,故在此汇总下。写排序算法重要的是理解它的原理,找到如何遍历及遍历和终止的条件插入排序从左建立有序区,将右侧的值依次插入该有序区,有序区中从插入的位置开始依次后移一位...博文来自:kakaxi679的专栏

  这一系列的文章是关于netflixtechblog的推荐系统相关文章的总结。大部分内容来自netflix-techblog:recommendations按照时间顺序,最早的关于推荐系统的文章发表于2...博文来自:炼丹笔记本

  处理海量数据问题,无非就是:分而治之/hash映射+has...博文来自:liuliangsailor的专栏

  冒泡排序是一种交换类排序的算法,比较常用,这里讨论下算法的优化。//待排序数组,升序排序int[]arr={2,6,4,5,3,7,8,11,14};算法一这是最简单也是最容易的写法,两层for循环,...博文来自:L的博客

  归并排序:归并排序是建立在归并操作上的一种有效的排序算法,该算法是采用分治法(DivideandConquer)的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再...博文来自:代码改变世界

  算法原理:1、比较相邻的元素。如果第一个比第二个大,就交换他们两个。2、对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。3、针对所有的元素重复以上的步...博文来自:赖德发的博客

  转载自:谭继臻排序算法说明(1)排序的定义:对一序列对象根据某个关键字进行排序;输入:n个数:a1,a2,a3,…,an输出:n个数的排列:a1’,a2’,a3’,…,an’,使得a1’再讲的形象点就...博文来自:永不放弃的博客

  文章目录比较算法排序证明过程比较算法排序证明过程通过排序树,我们将数组的比较过程分解(两数相比得到的结果将为二叉树)则所有的叶节点的排列顺序为可能的排列顺序(若有nnn个元素,则排列个数为n!n!n!...博文来自:wutenglong123的博客

  我们常用的排序冒泡排序O(n^2);快速排序O(nlogn);堆排序O(nlogn);选择排序O(n^2);我们常用的排序都不符合时间复杂度的要求;经常听说一个说法 用空间代替时间现在要排序的数组为数...博文来自:Coder

  整理自极客时间-数据结构与算法之美。原文内容更完整具体,且有音频。购买地址:一.前言今天,我会讲三种时间复杂度是O(n)的排序算法:桶排序、计数排序、基数排序。因为这些排序算法的时间复杂度是线性的,所...博文来自:王小安的博客

  之前写过这个小算法,也没有在意,只是用for循环来一个个的比较。后来才觉得这在数据量很大的情况下会产生很多额外的开销。因此进行了优化。计算名次:进行最少次数的比较。templatevoidRank(T...博文来自:banzhiyu的专栏

  一、前言快速排序是一种交换排序,它由C.A.R.Hoare在1962年提出。二、算法思想快速排序的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分:分割点左边都是比它小的数,右边都是比它大的数...博文来自:Dby_freedom的博客

  【归并排序的思想】归并排序的思想是如果子数组L和子数组R都是有序的,那么我们可以将其合并为一个有序数组;在归并排序中,首先将子数组的长度设为1,此时每个元素都是一个有序子数组,通过两两合并,我们可以得...博文来自:adminabcd的专栏

  排序算法插入排序(InsertionSort)如果要向一组已经排好了序的数中,再插入一个数,可以从头开始遍历,直到找到相应的位置,插入即可。所以我们可以这样对一组数进行插入排序:进行N-1次pass,...博文来自:vxxm的博客

  目录归并排序算法原理归并排序算法的使用场景归并排序算法的实现归并排序算法的运行结果归并排序算法原理归并排序算法会把序列分成长度相同的两个子序列,当无法继续往下分时(也就是每个子序列中只有一个数据时),...博文来自:chenliang0224的专栏

  选择排序不断选择剩余元素的最小值找到数组中最小的那个元素,然后将他和数组的第一个元素交换,如果第一个元素就是最小的元素那么就和它自己交换在剩下的元素中找到最小的元素,将它和数组的第二个元素交换循环,直...博文

  希尔排序是把记录按下标的一定增量分组,对每组使用直接插入排序算法排序;随着增量逐渐减少,每组包含的关键词越来越多,当增量减至1时,整个文件恰被分成一组,算法便终止。......博文来自:ReDisaster的博客

  这篇博客从以下几个方面来说:什么是最大堆以及代码实现堆排序基础代码一次优化二次优化1.什么是最大堆以及代码实现/***最大堆:* 这里使用data[]数组来保存最大堆,data[0]不使用,data...博文来自:呆萌的代Ma

  排序算法系列之快速排序(5) 一、普通快速排序快速排序把原数组划分为2个数组,其中左边第一个数组的元素都比选定的关键字小,右边的第二个数组都比选定的关键字大;快速排序采用的是分治的思想...博文来自:lliaoguipeng13的专栏

  1、冒泡排序冒泡排序的基本思想就是:从无序序列头部开始,进行两两比较,根据大小交换位置,直到最后将最大(小)的数据元素交换到了无序队列的队尾,从而成为有序序列的一部分;下一次继续这个过程,直到所有数据...博文来自:来自小白的挖掘算法入门

  1.将2个各有N个元素的有序表归并成一个有序表,其最少的比较次数是:N分析:归并排序最少比较N,最多比较2N-1.当第一个有序表中所有的元素都小于(或大于)第二个表中的元素,只需要用第二个表中的第一个...博文来自:王小东大将军的博客

  简单选择排序的平均复杂度为\(O(n^2)\),但效率通常比相同平均复杂度的直接插入排序还要差。但由于选择排序是内部排序,因此在内存严格受限的情况下还是可以用的。选择排序的原理很简单,如下图所示:持续...博文来自:shuzfan的专栏

  对象的内存分配从大方向上将,就是在堆上分配(但也可能经过JIT编译后被拆散为标量类型并间接在栈上分配),对象主要分配在新生代的Eden区上,如果启动了本地线程分配缓冲,将按线程优先在TLAB(转换后援...博文来自:小小本科生成长之路

  最近比较有空,大四出来实习几个月了,作为实习狗的我,被叫去研究Docker了,汗汗! Docker的三大核心概念:镜像、容器、仓库 镜像:类似虚拟机的镜像、用俗话说就是安装文件。 容器:类似一个轻量...博文来自:我走小路的博客

  前面既然写了中缀转后缀的,那么现在说下中缀转前缀的,至于后缀(前缀)转中缀,可以根据相关的转换规则自行转换。目的将中缀表达式(即标准的表达式)转换为前缀表达式例如:1+2*3+(4*5+6)7 转换成...博文来自:Xefvan的博客

  jquery/js实现一个网页同时调用多个倒计时(最新的) 最近需要网页添加多个倒计时. 查阅网络,基本上都是千遍一律的不好用. 自己按需写了个.希望对大家有用. 有用请赞一个哦! //js ...博文来自:Websites

  网上查了一下工业视觉标定板,少则几百大洋,多则几千大洋,就想在A4纸上山寨打印一个标定图,就是黑白方格相间的那种。A4纸的标准大小为210*297mm。搞了个把小时,其实想明白了之后很简单。从每...博文来自:eric_e的博客

  在MATLAB中,可以注释一段程序。 使用“%{”和“%}”。 例如 %{ 。。。 %} 即可。 经典方法是用 if 0,但缺点是不够直观,注释掉的内容仍然保持代码的颜色。现在可以用 ...博文来自:知识小屋

  一、代理模式为某个对象提供一个代理,从而控制这个代理的访问。代理类和委托类具有共同的父类或父接口,这样在任何使用委托类对象的地方都可以使用代理类对象替代。代理类负责请求的预处理、过滤、将请求分配给委托...博文来自:小小本科生成长之路

  用CSS写背景图片,background-image:url(1.jpg); 但是一直都不显示图片,只有原本写好的div的边框。 一般不显示都是路径写错的问题,(图片的相对路径是指相对于写这条c...博文来自:yovven的博客

http://duchtech.com/tongliansuanfa/142.html
锟斤拷锟斤拷锟斤拷QQ微锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷微锟斤拷
关于我们|联系我们|版权声明|网站地图|
Copyright © 2002-2019 现金彩票 版权所有