快三排序算法

快速排序(Quicksort)是对冒泡排序的一种改进。快速排序由C.A.R.Hoare在1962年提出。它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。快速排序是C.R.A.Hoare于1962年提出的一种划分交换排序。它采用了一种分治的策略,通常称其为分治法(Divide-and-ConquerMethod)。 该方法的基本思想是:1.先从数列中取出一个数作为基准数。2.分区过程,将比这个数大的数全放到它的右边,小于或等于它的数全放到它的左边。3.再对左右区间重复第二步,直到各区间只有一个数。 虽然快速排序称为分治法,但分治法这三个字显然无法很好的概括快速排序的全部步骤。因此我的对快速排序作了进一步的说明:挖坑填数+分治法。//快速排序voidquick_sort(ints[],intl,intr){   if(l<r)   {//S...
代码星球 代码星球·2020-04-12

Shell排序算法

  希尔排序,也称递减增量排序算法,是直接插入排序算法的一种高速而稳定的改进版本。  希尔排序是把记录按下标的一定增量分组,对每组使用直接插入排序算法排序;随着增量逐渐减少,每组包含的关键词越来越多,当增量减至1时,整个文件恰被分成一组,算法便终止。  先取一个小于n的整数d1作为第一个增量,把文件的全部记录分组。所有距离为d1的倍数的记录放在同一个组中。先在各组内进行直接插入排序;然后,取第二个增量d2<d1重复上述的分组和排序,直至所取的增量=1(<…<d2<d1),即所有记录放在同一组中进行直接插入排序为止。希尔排序是基于插入排序的以下两点性质而提出改进方法的:插入排序在对几乎已经排好序的数据操作时,效率高,即可以达到线性排序的效率但插入排序一般来说是低效的,因为插入排序每次只能将数据移动一位时间复杂度:最坏情况下为O(n^2),平均时间复杂度为O(nlogn);空间复杂度:归并排序需要一个大小为1的临时存储空间用以保存合并序列,所以空间复杂度为O(1)算法稳定性:从上面图片中可以看出,数字5在排序后交换了位置,所以它是不稳定的算法。&nbs...
代码星球 代码星球·2020-04-12

选择排序算法

三,选择排序    从算法逻辑上看,选择排序是一种简单直观的排序算法,在简单选择排序过程中,所需移动记录的次数比较少。 1,基本思想    选择排序的基本思想:比较+交换在待排序的一组数据中,选出最小(最大)的一个数与第一个位置的数交换,然后在剩下的数中,再找最小(最大)的数与第二个位置的数交换位置,依次类推,直到第N-1个元素与第N个元素交换位置,选择排序结束。2,过程描述    操作方法:第一趟:从n个记录中找出关键码最小的记录和第一个记录交换;第二趟:从第二个记录开始的n-1个记录中再选出关键码最小的记录与第二个记录交换以此类推......第i趟,则从第i个记录开始的n-i+1个记录中选出关键码最小的记录与第i个记录交换,直到整个序列按关键码有序。 3,代码案例:    publicclassSelectSort{publicstaticvoidmain(String[]args){//定义一个数组in...
代码星球 代码星球·2020-04-12

稳定排序和不稳定排序

     这几天笔试了好几次了,连续碰到一个关于常见排序算法稳定性判别的问题,往往还是多选,对于我以及和我一样拿不准的同学可不是一个能轻易下结论的题目,当然如果你笔试之前已经记住了数据结构书上哪些是稳定的,哪些不是稳定的,做起来应该可以轻松搞定。本文是针对老是记不住这个或者想真正明白到底为什么是稳定或者不稳定的人准备的。     首先,排序算法的稳定性大家应该都知道,通俗地讲就是能保证排序前2个相等的数其在序列的前后位置顺序和排序后它们两个的前后位置顺序相同。在简单形式化一下,如果Ai=Aj,Ai原来在位置前,排序后Ai还是要在Aj位置前。     其次,说一下稳定性的好处。排序算法如果是稳定的,那么从一个键上排序,然后再从另一个键上排序,第一个键排序的结果可以为第二个键排序所用。基数排序就是这样,先按低位排序,逐次按高位排序,低位相同的元素其顺序再高位也相同时是不会改变的。另外,如果排序算法稳定,对基于比较的排序算法而言,元素交换的次数...
代码星球 代码星球·2020-04-12

数组随机排序之洗牌

@Traveller在DIV.IO分享了一篇《数组元素随机化排序算法实现》,这篇文章提供了三种数组项随机排序的实现方法:使用数组sort方法对数组元素随机排序1Array.prototype.shuffle=function(n){2varlen=this.length,3num=n?Math.min(n,len):len,4arr=this.slice(0);5arr.sort(function(a,b){6returnMath.random()-0.5;7});8returnarr.slice(0,num-1);9}随机交换数组内的元素1lib={}2lib.range=function(min,max){3returnmin+Math.floor(Math.random()*(max-min+1));4}56Array.prototype.shuffle=function(n){7varlen=this.length,8num=n?Math.min(n,len):len,9arr=this.slice(0),10temp,11index;1213for(vari=0;i<l...
代码星球 代码星球·2020-04-12

常见排序算法(JS版)

常见排序算法(JS版)包括:  内置排序,冒泡排序,选择排序,插入排序,希尔排序,快速排序(递归&堆栈),归并排序,堆排序,以及分析每种排序算法的执行时间。  index.html1<!DOCTYPEhtml>2<html>3<head>4<title>twobin常见排序算法(JS版)</title>5<metahttp-equiv="content-type"content="text/html;charset=utf-8"/>6<metaname="keywords"content="排序,算法,JavaScript排序"/>7<metaname="description"content="常见排序算法:冒泡排序,选择排序,插入排序,希尔排序,快速排序(递归),快速排序(堆栈),归并排序,堆排序"/>8<linkrel="stylesheet"type="text/css"href="main.css"/>9<scripttype="text/javascri...
代码星球 代码星球·2020-04-12

图解排序算法(四)之归并排序

  归并排序(MERGE-SORT)是利用归并的思想实现的排序方法,该算法采用经典的分治(divide-and-conquer)策略(分治法将问题分(divide)成一些小的问题然后递归求解,而治(conquer)的阶段则将分的阶段得到的各答案"修补"在一起,即分而治之)。分而治之   可以看到这种结构很像一棵完全二叉树,本文的归并排序我们采用递归去实现(也可采用迭代的方式去实现)。分阶段可以理解为就是递归拆分子序列的过程,递归深度为log2n。  再来看看治阶段,我们需要将两个已经有序的子序列合并成一个有序序列,比如上图中的最后一次合并,要将[4,5,7,8]和[1,2,3,6]两个已经有序的子序列,合并为最终序列[1,2,3,4,5,6,7,8],来看下实现步骤。packagesortdemo;importjava.util.Arrays;/***Createdbychengxiaoon2016/12/8.*/publicclassMergeSort{publicstaticvoidmain(String[]args){int[]arr={9,8,7,6,5,4,3,2,...
代码星球 代码星球·2020-04-11

Java ArrayList排序方法详解

由于其功能性和灵活性,ArrayList是Java集合框架中使用最为普遍的集合类之一。ArrayList是一种List实现,它的内部用一个动态数组来存储元素,因此ArrayList能够在添加和移除元素的时候进行动态的扩展和缩减。你可能已经使用过ArrayList,因此我将略过基础部分。如果你对ArrayList还不熟悉,你可以参考它的 API文档,可以很容易理解在ArrayList上执行基本的操作。Inthispost,IwilldiscussoneofthemostimportantoperationonArrayListthatyouwillmostlikelyrequireimplementingduringenterpriseapplicationdevelopment.It’ssortingtheelementsofanArrayList.在这篇文章中,我将讨论ArrayList中一种极其重要的操作,你很有可能需要在企业应用开发中实现它。它就是ArrayList元素的排序。考虑一个ArrayList存储着以字符串形式存在的国名(countryname),...

SQL Server排序的时候使null值排在最后

首先建一个表插入一些测试数据createtableUserInfo(    UserInfoID    intnotnullidentity(1,1)primarykey,   User_No     intnull,   User_Names  nvarchar(16) null)insertintoUserInfo(User_No,User_Names)select'104','名称三'unionallselect'103','名称二'unionallselect'108','名称七'unionallselect'105','名称四' unionallselect'106','名称五'unionallselect'102','名称一'unionallselect'107','名称六'unionallselect'109','名称八'insertintoUs...

算法:拓扑排序

什么是拓扑排序  其实在写这篇博客的时候,我也是以一个学习者的角度出发的,目的就是想让自己理解和初步掌握拓扑排序。维基百科的定义如下:      在计算机科学领域,有向图顶点的线性排序就是其拓扑排序,例如,图形的顶点可以表示要执行的任务,并且边可以表示一个任务必须在另一个任务之前执行的约束;在这个应用中,拓扑排序只是一个有效的任务顺序。当且仅当图形没有定向循环,即如果它是有向无环图(DAG),则拓扑排序是可能的。任何DAG具有至少一个拓扑排序,并且已知这些算法用于在线性时间内构建任何DAG的拓扑排序。  在图论中,由一个有向无环图的顶点组成的序列,当且仅当满足下列条件时,称为该图的一个拓扑排序(英语:Topologicalsorting)。每个顶点出现且只出现一次;若存在一条从顶点A到顶点B的路径,那么在序列中顶点A出现在顶点B的前面。  比如在下图中,当然首先必须是有向无环图,从1出发到达,拓扑序列可以为1,3,2,5,4。  我们在写有向无环图的拓扑排序时遵循一种常用的方法:从DAG图中选择一个没有前驱(即入度为0)的顶点并输出。从图中删除该顶点和所有以它为起点的有向边。重复1和2...
代码星球 代码星球·2020-04-11

php 数组排序以及按照某个字段排序

如果你已经使用了一段时间PHP的话,那么,你应该已经对它的数组比较熟悉了——这种数据结构允许你在单个变量中存储多个值,并且可以把它们作为一个集合进行操作。经常,开发人员发现在PHP中使用这种数据结构对值或者数组元素进行排序非常有用。PHP提供了一些适合多种数组的排序函数,这些函数允许你在数组内部对元素进行排列,也允许用很多不同的方法对它们进行重新排序。在这篇文章中我们将讨论该排序中最重要的几个函数。简单排序首先,让我们来看看最简单的情况:将一个数组元素从低到高进行简单排序,这个函数既可以按数字大小排列也可以按字母顺序排列。PHP的sort()函数实现了这个功能,如ListingA所示:ListingA<?phpÂ$data=array(5,8,1,7,2);Âsort($data);Âprint_r($data);Â?>输出结果如下所示:Array([0]=>1[1]=>2[2]=>5[3]=>7[4]=>8)也能使用rsort()函数进行排序,它的结果与前面所使用的sort()简...

文档倒排序索引

倒排索引是目前几乎所有支持全文检索的搜索引擎都需要依赖的数据结构,该索引结构被用来存储某个单词(或词组)在一个文档或一组文档中存储位置的映射,即提供了一种根据内容来查找文档的方式,由于不是根据文档来确定文档所含的内容,而是进行了相反的操作,因而被称为倒排索引。 图1-1为带词频统计属性的文档呢倒排索引算法 代码1-2和代码1-3为自定义FileInputFormat和自定义RecordReader,用于在mapper阶段,将文档的名称作为key,文档每行的内容作为value传给map函数代码1-2packagecom.hadoop.mapreduce;importjava.io.IOException;importorg.apache.hadoop.io.Text;importorg.apache.hadoop.mapreduce.InputSplit;importorg.apache.hadoop.mapreduce.RecordReader;importorg.apache.hadoop.mapreduce.TaskAttemptContext;importor...
代码星球 代码星球·2020-04-11

数据结构(三) 用java实现七种排序算法。

      很多时候,听别人在讨论快速排序,选择排序,冒泡排序等,都觉得很牛逼,心想,卧槽,排序也分那么多种,就觉得别人很牛逼呀,其实不然,当我们自己去了解学习后发现,并没有想象中那么难,今天就一起总结一下各种排序的实现原理并加以实现。                        -WZY一、文章编写风格总览    选择排序、插入排序、冒泡排序、归并排序、快速排序、希尔排序、堆排序、    最后对各种排序算法进行比较,理清楚各种排序的优缺点。      其中快速排序是冒泡排序的增强,堆排序是对选择排序的增强,希尔排序是对插入排序的增强,这就6种了,最后一种就是归并排序。          二、选择排序    选择排序是我认为最简单的一种排序了,因为我们自己也很容易想到这种方法对数组进行排序,原理非常简单,                原理图如上所示:先将第一个位值上的数跟之后所有位置上的数依次进行比较,如果第一个位置上的数比第二个位置上的数大,则进行互换,然后继续将第一个位置上的数与第三个位置上的数进行比较,经过一轮的比较后,第一个位值上的数就是所有数中最小的一个,接着将第二个位置...

Hive 按某列的部分排序 以及 删列操作

脑袋果然还是智商不足。 涉及到的小需求:某个表test有一列tc:a字符串+b字符串+c字符串拼接组成把test表,按b字符串排序输出遇到的问题:select里面必须包含orderby的列按b字符串排序后,提取的b字符串作的新列,也被包含在了输出表中最终解决:输出含有b字符串(新列)的表,当然要排序了把b列给删掉 补充:hive删表代码:REPLACECOLUMNS createtabletest(jstrstring,bstring);ALTERTABLEtestREPLACECOLUMNS(bstring); createtableasselectfrom   能够保持原表的数据顺序。...

PostgreSQL 数据库NULL值的默认排序行为与查询、索引定义规范

在数据库中NULL值是指UNKNOWN的值,不存储任何值,在排序时,它排在有值的行前面还是后面通过语法来指定。例如--表示null排在有值行的前面select*fromtblorderbyidnullsfirst;--表示null排在有值行的后面select*fromtblorderbyidnullslast;同时对于有值行,可以指定顺序排还是倒序排。--表示按ID列顺序排select*fromtblorderbyid[asc];--表示按ID列倒序排select*fromtblorderbyiddesc;默认的排序规则如下:descnullsfirst:nulllargesmallascnullslast:smalllargenull当nulls[first|last]与asc|desc组合起来用时,是这样的。值的顺序如下:1、DEFAULT:(认为NULL比任意值都大)descnullsfirst:顺序:nulllargesmallascnullslast:顺序:smalllargenull2、NONDEFAULT:(认为NULL比任意值都小)descnullslast:顺序:la...
首页上一页...4445464748...下一页尾页