排序

《Shell脚本学习指南》读书笔记4-第4章 文本处理工具

别等时光非礼了梦想. 提交于 2020-03-07 20:09:22
[摘自《Shell脚本学习指南》2009年4月第一版] 1.行的排序 sort [option] [file ...] -b 忽略开头的空白 -c 检查输入输入是否已经正确排序 -d 字典顺序,仅文字数字和空白才有意义 -g 以浮点数字类型比较字段;-n 以整型比较字段 -f 忽略字母大小写排序 -i 忽略不可打印的字符 -r 倒序排序 -u 丢弃所有具有相同键值的记录,只保留其中的第一条 -t char 使用单个字符char作为默认的字段分割字符,取代默认的空格 注意:sort是不稳定的,效率也不高。 2.删除重复 sort ... | uniq ...,也可以使用sort -u ... 3.计算行数字数和字符数 ... | wc -l 行数 -c 字节数 -w 字数 不带参数将会显示以上三者 4.提取文件开头或结尾数行 head -n n file head -n file awk 'FNR <= n' file sed -e nq file sed nq file tail -n n file tail -n file 来源: oschina 链接: https://my.oschina.net/u/815299/blog/113539

Python: Trie树实现字典排序

坚强是说给别人听的谎言 提交于 2020-03-02 02:18:24
一般语言都提供了按字典排序的API,比如跟微信公众平台对接时就需要用到字典排序。按字典排序有很多种算法,最容易想到的就是字符串搜索的方式,但这种方式实现起来很麻烦,性能也不太好。Trie树是一种很常用的树结构,它被广泛用于各个方面,比如字符串检索、中文分词、求字符串最长公共前缀和字典排序等等,而且在输入法中也能看到Trie树的身影。 什么是Trie树 Trie树通常又称为字典树、单词查找树或前缀树,是一种用于快速检索的多叉树结构。如图数字的字典是一个10叉树: 同理小写英文字母或大写英文字母的字典数是一个26叉树。如上图可知,Trie树的根结点是不保存数据的,所有的数据都保存在它的孩子节点中。有字符串go, golang, php, python, perl,它这棵Trie树可如下图所示构造: 我们来分析下上面这张图。除了根节点外,每个子节点只存储一个字符。go和golang共享go前缀,php、perl和python只共用p前缀。为了实现字典排序,每一层节点上存储的字符都是按照字典排序的方式存储(这跟遍历的方式有关)。我们先来看看对单个字符如何进行字典排序。本文只考虑小写字母,其它方式类似。'a'在'b'的前面,而'a'的ASCII码小于'b'的ASCII码,因此通过它们的ASCII相减就可以得到字典顺序。而且python内置了字典排序的API,比如: #!/usr/bin

Collections.reverse对list集合进行降序排序

戏子无情 提交于 2020-01-08 13:52:02
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> public class Test { public static void main(String[] args) { long[] data = {4, 3, 1, 8, 6, 9, 2}; List list = new ArrayList<>(); for (long key : data) { list.add(key); } System.out.println(list); //先升序 // Collections.sort(list); // System.out.println(list); //再反转 Collections.reverse(list); System.out.println(list); } } 今天无意中搜了一下Collections.reverse这个方法,结果发现有些人对它的误解蛮深的。下面是一个有百万访问量博主写的,reverse可以对指定列表进行降序排序,可是自己输出的结果都不是降序。 这里写图片描述 确实,使用Collections.reverse结合一定方法可以实现对list集合降序排序,但是直接使用Collections.reverse(list)这种方式来降序是错误的。 reverse的意思是反转,而不是降序。只是将list集合原来的顺序反转了一下

Java排序算法(九):归并排序

孤人 提交于 2020-01-07 08:52:25
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 归并排序 (Merge)是将两个(或两个以上)有序表合并成一个新的有序表,即把待排序序列分为若干个子序列,每个子序列是有序的。然后再把有序子序列合并为整体有序序列。 归并排序是建立在归并操作上的一种有效的排序算法。该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。 将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为2-路归并。 归并排序算法稳定,数组需要O(n)的额外空间,链表需要O(log(n))的额外空间,时间复杂度为O(nlog(n)),算法不是自适应的,不需要对数据的随机读取。 工作原理: 1、申请空间,使其大小为两个已经排序序列之和,该空间用来存放合并后的序列 2、设定两个指针,最初位置分别为两个已经排序序列的起始位置 3、比较两个指针所指向的元素,选择相对小的元素放入到合并空间,并移动指针到下一位置 4、重复步骤3直到某一指针达到序列尾 5、将另一序列剩下的所有元素直接复制到合并序列尾 代码实现: public class MergeSortTest { public static void main(String[] args) { int[] data = new int[] { 5, 3, 6,

PHP实现四种基本排序算法

拜拜、爱过 提交于 2019-12-23 10:30:17
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 许多人都说算法是程序的核心,算法的好坏决定了程序的质量。作为一个初级phper,虽然很少接触到算法方面的东西。但是对于基本的排序算法还是应该掌握的,它是程序开发的必备工具。这里介绍冒泡排序,插入排序,选择排序,快速排序四种基本算法,分析一下算法的思路。 前提: 分别用冒泡排序法,快速排序法,选择排序法,插入排序法将下面数组中的值按照从小到大的顺序进行排序。 $arr(1,43,54,62,21,66,32,78,36,76,39); 1. 冒泡排序 思路分析: 在要排序的一组数中,对当前还未排好的序列,从前往后对相邻的两个数依次进行比较和调整,让较大的数往下沉,较小的往上冒。即,每当两相邻的数比较后发现它们的排序与排序要求相反时,就将它们互换。 代码实现: $arr=array(1,43,54,62,21,66,32,78,36,76,39); function bubbleSort($arr) { $len=count($arr); //该层循环控制 需要冒泡的轮数 for($i=1;$i<$len;$i++) { //该层循环用来控制每轮 冒出一个数 需要比较的次数 for($k=0;$k<$len-$i;$k++) { if($arr[$k]>$arr[$k+1]) { $tmp=$arr[$k+1];

对NSArray与NSMutableArray按照其存储的对象的属性进行排序

99封情书 提交于 2019-12-10 15:35:32
方法1:使用 Compare method - (NSComparisonResult)compare:(Person *)otherObject { return [self.birthDate compare:otherObject.birthDate]; } NSArray *sortedArray; sortedArray = [drinkDetails sortedArrayUsingSelector:@selector(compare:)]; 方法2: NSSortDescriptor (better) NSSortDescriptor *sortDescriptor; sortDescriptor = [[[NSSortDescriptor alloc] initWithKey:@"birthDate" ascending:YES] autorelease]; NSArray *sortDescriptors = [NSArray arrayWithObject:sortDescriptor]; NSArray *sortedArray; sortedArray = [drinkDetails sortedArrayUsingDescriptors:sortDescriptors]; sortedArrayUsingDescriptors

关于tableView点击cell中按钮进入排序模式(cell行高统一可长按排序)

十年热恋 提交于 2019-12-10 15:35:13
RTDragCellTableView: https://github.com/RustedBigB/RTDragCellTableView 首先,为三方的tableview类添加了一个isMove的BOOL属性,用于标记是否处于排序状态。 在三方tableview类里的长按的方法里判断isMove的值。如果不是排序状态直接return。 if (! self . isMove ) { return ; } 为自定义的cell声明一个代理,在点击cell中的按钮时,使用代理改变tableview的isMove的值,使tableview进入排序状态。 - ( void )myTableViewCell:( MyTableViewCell *)cell funcBtnDidClick:( UIButton *)func { #pragma mark -- 改变数据源数组; NSMutableArray *arrayM = [ NSMutableArray array ]; //遍历数据源数组; for ( NSInteger i = 0 ; i < self . data . count ; i ++) { {//在这里是因为需要在排序模式下每一行的文字都需要能单独排序, //所以在进入排序模式的时候对数据源做了一些处理。 RTModel *model = self . data [i

Lucene打分规则与Similarity模块详解

北战南征 提交于 2019-12-09 19:50:27
搜索排序结果的控制 Lucnen 作为搜索引擎中,应用最为广泛和成功的开源框架,它对搜索结果的排序,有一套十分完整的机制来控制;但我们控制搜索结果排序的目的永远只有一个,那就是信息过滤,让用户快速,准确的找到其想要的结果,丰富用户体验。 以前看过一个牛人的博客,总结了 4 个地方,可对 Lucene 检索结果的排序进行控制,现在已经记不住。我自己简单整理了下面几个,若有疏漏,欢迎补充: 1. 通过 Lucene 自有的查询表达式: Lucene 提供相当丰富的表达式解析,要细讲就多了去了;这里只强调下,我在项目中用的比较多的是通过对指定域的加权,来影响检索结果(例如: field1:(XXX)^10 or field2:(XXX)^5 ;其中 XXX 是用户提交的检索) 2. 权重的控制:这是在建索引的时候就写入索引的,查询时只是读取出来,用乘的方式来对一些检索结果加分。据我自己看 Lucene 代码, Similarity 中也能在建索引时,对权重的写入进行控制;后面会细讲。 3. Controller 模块: Lucene 的排序流程控制模块,里面提供的一些接口能让你对打分后的搜索结果进行一些筛选和调整。 4. Similarity 模块: Lucene 的搜索结果打分控制模块,也是这里要详细分析的模块。他能让你对一个检索 结果的打分进行优化,或面目全非,哈哈。 Lucene

几种常见排序算法

不问归期 提交于 2019-12-05 06:32:46
几种常见排序算法 标签: algorithms [TOC] 本文介绍几种常见排序算法(选择排序,插入排序,希尔排序,归并排序,快速排序,堆排序),对算法的思路、性质、特点、具体步骤、java实现以及trace图解进行了全面的说明。最后对几种排序算法进行了比较和总结。 写在前面 本文所有图片均截图自coursera上普林斯顿的课程 《Algorithms, Part I》 中的Slides 相关命题的证明可参考 《算法(第4版)》 源码可在 官网 下载,也可以在我的github仓库 algorithms-learning 下载,已经使用maven构建 仓库下载: git clone git@github.com:brianway/algorithms-learning.git 基础介绍 java: Interface Comparable<T> Java中很多类已经实现了 Comparable<T> 接口,用户也可自定义类型实现该接口 total order: Antisymmetry(反对称性): if v ≤ w and w ≤ v, then v = w. Transitivity(传递性): if v ≤ w and w ≤ x, then v ≤ x. Totality: either v ≤ w or w ≤ v or both. 注意: The <= operator

Python排序总结:列表、字典、包含字典的列表、包含元组的列表排序

浪尽此生 提交于 2019-12-05 02:28:21
1、列表排序 两种方法 sorted(list):返回一个对象,原来的list不变,生成一个新的排好的list对象; list.sort():不会返回对象,改变原有list。 排序实例: L = [2, 4, 1, 5, 9] 1.1 升序 >>> sorted(L) [1, 2, 4, 5, 9] >>> L.sort() >>> print L [1, 2, 4, 5, 9] 1.2 降序 reverse关键字:排序规则。 reverse = True 或者 reverse = False,有默认值,默认为升序排列(False) >>> sorted(L,reverse=True) [9, 5, 4, 2, 1] >>> L.sort(reverse=True) >>> print L [9, 5, 4, 2, 1] 2、字典排序 字典的特点是无序,可以按照键(key)或者值(value)对其进行排序,但是返回的结果肯定不能是字典。 排序实例: D = {'jack': 23, 'rose': 21, 'flank': 22} 2.1 升序 2.1.1 lambda表达式 >>> sorted(D.items(), key=lambda d:d[1]) # 值(value)排序 [('rose', 21), ('flank', 22), ('jack', 23)] >>>