sort

JPA简单的分页条件查询

孤街醉人 提交于 2020-01-19 21:47:48
1,service层代码: @Override public QrCodeRecordPaging getPage(String projectId, Integer pageNumber, Integer pageSize) { //创建时间排序 Sort sort = new Sort(Sort.Direction.DESC, "createAt"); //不合法给予默认值 if (pageNumber == null || pageSize == null || pageNumber <= 0 || pageSize <= 0) { pageNumber = 1; pageSize = Integer.MAX_VALUE; } PageRequest pageRequest = new PageRequest(pageNumber - 1, pageSize, sort); //返回分页信息 Page<QrCodeRecord> all = qrCodeRecordRepository.findAll((root, query, cb) -> { //断言,添加断言 Predicate p = cb.equal(root.get("projectId").as(String.class), projectId); return cb.and(p); },

rust sort

♀尐吖头ヾ 提交于 2020-01-19 18:57:38
leetcode 976 给定由一些正数(代表长度)组成的数组 A ,返回由其中三个长度组成的、面积不为零的三角形的最大周长。 如果不能形成任何面积不为零的三角形,返回 0 。 1 impl Solution { 2 pub fn largest_perimeter(a: Vec<i32>) -> i32 { 3 let mut a = a; 4 a.sort_by(|a, b| b.cmp(&a)); 5 for i in 0..a.len()-2 { 6 if a[i] < a[i+1] + a [i+2] { 7 return a[i] + a[i+1] + a[i+2]; 8 } 9 } 10 0 11 } 12 } sort_by源码 1 /// # Examples 2 /// 3 /// ``` 4 /// let mut v = [5, 4, 1, 3, 2]; 5 /// v.sort_by(|a, b| a.cmp(b)); 6 /// assert!(v == [1, 2, 3, 4, 5]); 7 /// 8 /// // reverse sorting 9 /// v.sort_by(|a, b| b.cmp(a)); 10 /// assert!(v == [5, 4, 3, 2, 1]); 11 /// ``` 12 #[stable(feature

js中sort总结

試著忘記壹切 提交于 2020-01-19 17:37:34
数据排序这块应该是每个程序员都会遇到的,而这篇文章主要是介绍js中sort排序如何使用得当,既然有现成的封装的方法就用现成的,自己稍加修改就能完成,不需要再重新自己重头到尾写个函数,当然如果大家有这个兴趣也可以自己写啦。 1.字母排序 sort默认的排序方式为字母排序,根据二十六个字母依次排列,单词之间比较,则先比较第一个字母,如果第一个字母相同则比较第二个字母,以此类推。 // 1.字母排序(sort默认排序) var arr = ["za","zb","a","b","xc","xa"]; arr.sort(); console.log(arr); // 运行结果:["a", "b", "xa", "xc", "za", "zb"] 2.sort数字排序 sort()中参数可以是方法函数,可以升序和降序输出结果。 //2.sort数字排序 var array = [100,10,50,800,320,34,53]; array.sort(function(a,b){ //a-b升序,b-a降序 return b-a; }); console.log(array); //运行结果:[800, 320, 100, 53, 50, 34, 10] 注意: 其中a,b都是表示这个数组里面的元素,如果是a-b则表示升序,如果是b-a则表示降序。 3.数组对象排序

STL之sort应用

帅比萌擦擦* 提交于 2020-01-19 01:51:46
前言 顾名思义,sort()是标准库中的排序算法,能用此算法的容器是支持随机访问的容器:vector, deque, string,array。 其有两种形式,第一种sort(a,b),其中a,b为排序的地址范围,为[a,b),此时用operator<作比较,默认升序排序。 第二种sort(a,b,comp),此时采用comp进行比较,comp带两个同类型的参数,如果第一个参数排在第二个参数前面,返回true,否则返回false,它可以是函数指针,也可以是函数对象,即仿函数。 下为几个常见的仿函数: less(小于) greater(大于) equal_to(等于) not_equal_to(不相等) less_equal(小于等于) greater_equal(大于等于) 须注意不能直接写入仿函数的名字,而是要写其重载的()函数: less<>() greater<>() 常见sort分类 1.全排序 sort 和 stable_sort,前者不稳定,采用快排,后者为稳定排序,归并排序 2.部分排序 partial_sort,如part_sort(a,a+n,comp);只排前n个,采用堆排序,显然适用于求解topn问题。 结构体排序 针对两种sort的两种形式主要有两种应用形式。 1.运算符重载 采用sort(a,b),或者只想利用上述常见的伪函数,需要用到运算符重载。

数据结构之排序基础知识笔记

北战南征 提交于 2020-01-18 22:14:17
概述 最近在温习数据结构,现在针对排序算法写一篇随笔,其中附带原理说明和代码。 插入排序 直接插入排序(Straight Insertion Sort)的基本思想是:把n个待排序的元素看成为一个有序表和一个无序表。开始时有序表中只包含1个元素,无序表中包含有n-1个元素,排序过程中每次 从无序表中取出第一个元素,将它插入到有序表中的适当位置,使之成为新的有序表,重复n-1次可完成排序过程。 假设{20,30,40,10,60,50}中的前3个数已经排列过,是有序的了;接下来对10进行排列。示意图如下: 图中将数列分为有序区和无序区。我们需要做的工作只有两个:(1)取出无序区中的第1个数,并找出它在有序区对应的位置。(2)将无序区的数据插入到有序区;若有必要的话,则对有序区中的相关数据进行移位。 时间复杂度和稳定性 直接插入排序的时间复杂度是O(N2)。 假设被排序的数列中有N个数。遍历一趟的时间复杂度是O(N),需要遍历多少次呢?N-1!因此,直接插入排序的时间复杂度是O(N*N)。 直接插入排序是稳定的算法,它满足稳定算法的定义。 算法稳定性 -- 假设在数列中存在a[i]=a[j],若在排序之前,a[i]在a[j]前面;并且排序之后,a[i]仍然在a[j]前面。则这个排序算法是稳定的。 插入排序JAVA实现 1 import static javaTest.SortUtils

spark shuffle

六月ゝ 毕业季﹏ 提交于 2020-01-18 14:17:15
Spark Shuffle 1. Shuffle相关 当Map 的输出结果要被Reduce使用时,输出结果需要按key哈希,并且分发到每一个Reducer上去,这个过程就是shuffle。由于shuffle涉及到了磁盘的读写和网络的传输,因此shuffle性能的高低直接影响到了整个程序的运行效率。概念上shuffle就是一个沟通数据连接(map和reduce)的桥梁。每个ReduceTask从每个Map Task产生数的据中读取一片数据,极限情况下可能触发M*R个数据拷贝通道(M是MapTask数目,R是Reduce Task数目)。 在Spark1.1 之前,其shuffle只存在一种模式,即hash base。在Spark1.1版本之后加入了sort base。Spark1.1默认采用的shuffle模式还是hash base。在Spark1.2中,sort base将作为默认模式。当然,你可以通过shuffle manager进行配置。 2. Spark shuffle流程 · 首先每一个Mapper 会根据Reducer的数量创建出相应的bucket,bucket的数量是M×R,其中M是Map的个数,R是Reduce的个数。 · 其次Mapper 产生的结果会根据设置的partition算法填充到每个bucket中去。这里的partition算法是可以自定义的

面试现场写排序算法

这一生的挚爱 提交于 2020-01-18 01:53:42
1、归并排序 #include < stdio.h > #include < stdlib.h > typedef int DataType; void merge(DataType arr[], int low, int mid, int high) { DataType * arrTmp; arrTmp = (DataType * )malloc( sizeof (DataType) * (high - low + 1 )); if (arrTmp == NULL) return ; int i = low, j = mid + 1 , p = 0 ; while (i <= mid && j <= high) { arrTmp[p ++ ] = arr[i] < arr[j] ? arr[i ++ ]:arr[j ++ ]; } while (i <= mid) { arrTmp[p ++ ] = arr[i ++ ]; } while (j <= high) { arrTmp[p ++ ] = arr[j ++ ]; } p = 0 ; while (p < high - low + 1 ) { arr[low + p] = arrTmp[p]; p ++ ; } free(arrTmp); arrTmp = NULL; } void merge_sort(DataType

mysql调优之索引——ORDER BY(GROUP BY)

别说谁变了你拦得住时间么 提交于 2020-01-17 19:03:45
order by 的排序优化 1、 ORDER BY 子句尽量使用index方式排序,避免使用filesort方式排序。 2、ORDER BY 满足两种方式会使用index方式排序: order by使用索引最左前列 使用where 子句与order by 子句条件列组合满足索引最左前列 3、如果不在索引列上,filesort有两种算法,mysql就要启动双路和单路排序. 双路排序 (1)mysql4.1之前是使用双路排序,两次扫描磁盘,最终得到数据,读取行指针和order by列,对他们进行排序,然后扫描已经排好序的列表,按照列表中的值重新从数据库列表中读取对应的数据输出。 (2)从磁盘读取字段,在buffer中进行排序,再从磁盘取其他字段。 (3)取一批数据,要扫描两次磁盘,进行两次I/O操作,由于I/O操作很耗时,索引在4.1之后采用另一种算法,单路排序。 单路排序 从磁盘中读取查询所需要的列,按照order by列在buffer进行排序,然后扫描排序后的列表进行输出,它的效率更高一点,避免了第二次读取数据。并且随机I/O变成了顺序I/O,但是它会使用更大的内存空间,因为它把数据都保存在内存当中。 注意 在sort buffer中,单路排序比双路排序使用了更多的内存空间,因为单路排序把所有字段都取出,所有有可能导致取出的数据总大小超出sort_buffer的容量

PAT 乙级 1035 插入与归并 (25分)

只谈情不闲聊 提交于 2020-01-17 16:33:24
1035 插入与归并 (25分) 根据维基百科的定义: 插入排序是迭代算法,逐一获得输入数据,逐步产生有序的输出序列。每步迭代中,算法从输入序列中取出一元素,将之插入有序序列中正确的位置。如此迭代直到全部元素有序。 归并排序进行如下迭代操作:首先将原始序列看成 N 个只包含 1 个元素的有序子序列,然后每次迭代归并两个相邻的有序子序列,直到最后只剩下 1 个有序的序列。 现给定原始序列和由某排序算法产生的中间序列,请你判断该算法究竟是哪种排序算法? 输入格式: 输入在第一行给出正整数 N (≤100);随后一行给出原始序列的 N 个整数;最后一行给出由某排序算法产生的中间序列。这里假设排序的目标序列是升序。数字间以空格分隔。 输出格式: 首先在第 1 行中输出Insertion Sort表示插入排序、或Merge Sort表示归并排序;然后在第 2 行中输出用该排序算法再迭代一轮的结果序列。题目保证每组测试的结果是唯一的。数字间以空格分隔,且行首尾不得有多余空格。 输入样例 1: 10 3 1 2 8 7 5 9 4 6 0 1 2 3 7 8 5 9 4 6 0 输出样例 1: Insertion Sort 1 2 3 5 7 8 9 4 6 0 输入样例 2: 10 3 1 2 8 7 5 9 4 0 6 1 3 2 8 5 7 4 9 0 6 输出样例 2: Merge