list排序

poj2007(极角排序)

不打扰是莪最后的温柔 提交于 2019-12-04 00:21:18
题目链接:https://vjudge.net/problem/POJ-2007 题意:乱序给出凸包的所有顶点,按极角序输出顶点。 思路:按极角排序一次即可。 AC code: #include<cstdio> #include<cstring> #include<algorithm> #include<cmath> using namespace std; const int maxn=105; const double PI=acos(-1.0); struct Point{ int x,y; Point():x(0),y(0){} Point(int x,int y):x(x),y(y){} }list[maxn]; int stack[maxn],top; //计算叉积p0p1×p0p2 int cross(Point p0,Point p1,Point p2){ return (p1.x-p0.x)*(p2.y-p0.y)-(p2.x-p0.x)*(p1.y-p0.y); } //计算p1p2的距离 double dis(Point p1,Point p2){ return sqrt((double)(p2.x-p1.x)*(p2.x-p1.x)+(p2.y-p1.y)*(p2.y-p1.y)); } //极角排序函数,角度相同则距离小的在前面 bool cmp

Java 排序算法 快速排序

て烟熏妆下的殇ゞ 提交于 2019-12-04 00:04:07
import java.util.ArrayList; import java.util.Random; /* *返回一个数组,下标0是该元素的下标,下标1是该元素的值 */ public class minNumber { //每次返回接受数组中最小的数字,以数组的形式返回,0是最小数,1是它的下标 public static ArrayList<Integer> findMinNumber(ArrayList<Integer> list){ ArrayList<Integer> min_number=new ArrayList<Integer>(); min_number.add(list.get(0)); min_number.add(0); for(int i=1;i<list.size();i++){ if(list.get(i)<min_number.get(0)){ min_number.add(0,list.get(i)); min_number.add(1,i); } } return min_number; } public static void main(String[] args){ //第一个是等待排序的列表,第二个相当于第一个的拷贝,第三个就是整理好的数组 ArrayList<Integer> list=new ArrayList<Integer>

第十章 Scala 容器基础(二十八):集合排序

夙愿已清 提交于 2019-12-03 23:58:26
Problem 你想要对一个集合元素进行排序。或者你想定义一个自定义类来实现 Ordered trait,来让你可以使用 sorted方法,或者使用比较操符<,<=,>,>=来对类的实例进行比较。 Solution 你可以使用 sorted或者sortWith方法来对集合进行排序。 Sorted方法可以对集合元素类型为Double,Float,Int和其他可以隐试转化 scala.math.Ordering的进行排序。 scala> val l = List(10, 5, 8, 1, 7).sorted l: List[Int] = List(1, 5, 7, 8, 10) scala> val b = List("banana", "pear", "apple", "orange").sorted b: List[String] = List(apple, banana, orange, pear) Rich版本的 numeric类(比如RichInt)和StringOps类都实现了Ordered trait,所以他们可以使用sorted方法实现排序。 SortWith方法让你可以使用自己的排序逻辑来实现排序规则。下面的例子展示了如何对集合元素类型为Int和String使用sortWith排序: scala> List(10, 5, 8, 1, 7).sortWith(_ < _

英文单词个数统计及排序

喜欢而已 提交于 2019-12-03 22:41:07
1 import java.io.*; 2 import java.util.*; 3 public class treat { 4 5 public static void main(String[] args) { 6 Map<String,Integer> map=new HashMap<String,Integer>(); 7 try { 8 File file=new File("/Users/lilongrong/Desktop/win.txt"); 9 BufferedReader read=new BufferedReader(new FileReader(file)); 10 String str; 11 while((read.readLine())!=null) { 12 str=read.readLine(); 13 String[] strsplit=str.split("\\W+"); 14 for(int i=0;i<strsplit.length;i++) { 15 if(map.containsKey(strsplit[i])) { 16 int a; 17 a=map.get(strsplit[i]); 18 map.put(strsplit[i],a+1); 19 }else { 20 map.put(strsplit[i],1); 21 }

使用Spring Data JPA进行数据分页与排序

拥有回忆 提交于 2019-12-03 22:28:24
一、导读 如果一次性加载成千上万的列表数据,在网页上显示将十分的耗时,用户体验不好。所以处理较大数据查询结果展现的时候,分页查询是必不可少的。分页查询必然伴随着一定的排序规则,否则分页数据的状态很难控制,导致用户可能在不同的页看到同一条数据。那么,本文的主要内容就是给大家介绍一下,如何使用Spring Data JPA进行分页与排序。 二、实体定义 我们使用一个简单的实体定义:Article(文章) @Data @AllArgsConstructor @NoArgsConstructor @Builder @Entity @Table(name="article") public class Article { @Id @GeneratedValue private Long id; @Column(nullable = false,length = 32) private String author; @Column(nullable = false, unique = true,length = 32) private String title; @Column(length = 512) private String content; private Date createTime; } @Entity 表示这个类是一个实体类,接受JPA控制管理,对应数据库中的一个表

使用文件读写操作统计哈利波特英文版中的字母,单词,并按要求输出

我们两清 提交于 2019-12-03 21:00:07
要求如下: 1.将哈利波特英文电子版导入,并统计每个英文字母出现概率(区分大小写),由大到小排序 2.统计该txt 文件中每个单词的个数,并按照要求输出频率最高的几个单词数目 和出现概率 功能1: 输出文件中所有不重复的单词,按照出现次数由多到少排列,出现次数同样多的,以字典序排列。 功能2: 指定目录,对目录下的每一个文件执行功能1 操作 功能3: 指定文件目录,但是会递归目录下的所有子目录,每个文件执行功能1的操作。 问题: 1.程序如何识别每一个单词: 当出现非字母符号时划分为一个单词,用正则表达式来分割句子, 形成单词; 1 //非单词用来分割单词 2 String [] words = str.split("[^(a-zA-Z)]+"); 2.如何存储单词和后边的数据:使用Map 数组, key值设置为 String 存储单词 ,value 根据需要改变类型 1 //创建哈希表 记录数目 2 Map<String,Integer> map =new HashMap<String,Integer>(); 主要思想: 读取文件内的数据,将数据转换为char类型,区分大小写统计字母个数,于此同时统计字母总个数。 1.使用BufferedReader 读取的缓存流进行读取,将数据添加到字符串缓冲区 StringBuffer 当中,将字符串缓冲区中的数据转换为char类型进行存储

【算法】大规模排序

☆樱花仙子☆ 提交于 2019-12-03 20:34:09
归并排序和快速排序都比较适合大规模的数据排序。两者都用到了分治的思想。 归并排序 归并排序的核心思想蛮简单的,如果要排序一个数组,我们先把数组从中间分成前后俩部分,然后对前后俩部分分别排序,再将排好序的俩部分合并再一起。这样一步一步往下分而治之,将整个排序分成小的子问题来解决。 def merge(left:list,right:list)->list: temp = list() if left[-1] <= right[0]: temp = left + right return temp if right[-1] <= left[0]: temp = right +left return temp left_index = right_index = 0 while left_index <len(left) and right_index <len(right): if left[left_index] < right[right_index]: temp.append(left[left_index]) left_index += 1 else: temp.append(right[right_index]) right_index += 1 if left_index == len(left): temp += right[right_index:] else:

【算法】小规模排序

淺唱寂寞╮ 提交于 2019-12-03 18:16:22
在将排序之前,首先思考一个问题:选择排序、插入排序、冒泡排序的时间复杂度均为 o(n) ,为什么大家在讲排序的时候首先更愿意讲插入排序? 在分析一个排序算法好坏的时候,往往要考虑这么几个方面: 1.时间复杂度 考虑到时间复杂度的时候就要考虑到最好情况和最坏情况,尽可能多的有序当然是最好的情况,完全逆序则是最坏的情况,有序度不同,算法的性能也不同。 2.空间复杂度 算法的内存消耗可以通过空间复杂度来衡量。其中,原地排序算法,指的是空间复杂度 o(1)的算法。 3.排序算法的稳定性 稳定性指的是,如果待排序的序列中存在值相等的元素,经过排序以后,相等元素之间原有的先后顺序不变。 举个例子,如果现在我们要给电商交易系统的“订单”排序,订单有俩个属性,一个是下单时间,一个是订单金额。对于时间相同的订单,我们希望按照金额从小到大排序,对于金额相同的订单,我们希望按照下单时间从早到晚排序。那么我们可以按照俩个属性分别排一次续,如果是稳定的排序算法,假设第一次按时间排序,第二次按照金额排序,那么稳定算法可以保持金额相同的俩个对象,在排序后的前后顺序不变。 首先介绍一下三种排序算法: 冒泡排序 冒泡排序只会操作俩个相邻的数据,每次冒泡操作都会对相邻的俩个元素进行比较,如果不满足大小关系要求就让它俩互换。一次有效的冒泡至少会让一个元素移动到它应该在的位置,重复N次就完成了N个数据的排序工作。 实际上

Java集合

落花浮王杯 提交于 2019-12-03 17:25:26
前言 集合只能存储对象,存放的是多个对象的引用,对象本身还是放在堆内存中。 Collections和Arrays工具类: 两个工具类分别操作集合和数组,可以进行常用的排序,合并等操作。 TreeMap和TreeSet: 主要是基于红黑树实现的两个数据结构,可以保证key序列是有序的。 HashMap和HashSet: 基于哈希表实现,支持快速查找。 ArrayList(有序列表,允许存放重复的元素,允许使用null元素) 接口: List 实现类: LinkedList,Vector,ArrayList: ArrayList:数组实现,查询快,增删慢,轻量级(线程不安全) LinkedList:双向链表实现,增删快,查询慢,轻量级(线程不安全) Vector:数组实现,重量级(线程安全、使用少) ArrayList是实现List接口的动态数组。 同步访问:List list = Collections.synchronizedList(new ArrayList(...)); ArrayList: 继承: AbstractList抽象父类 实现: List接口(规定了List的操作规范) RandomAccess(可随机访问) Cloneable(可拷贝) Serializable(可序列化) ArrayList: 优点: get(int index) set(int index,

LFU的基本原理与实现

放肆的年华 提交于 2019-12-03 12:08:47
前言 :之前有写过一篇关于LRU的文章链接 https://www.cnblogs.com/wyq178/p/9976815.html LRU全称:Least Recently Used:最近最少使用策略,判断最近被使用的时间,距离目前最远的数据优先被淘汰,作为一种根据访问时间来更改链表顺序从而实现缓存淘汰的算法,它是redis采用的淘汰算法之一。redis还有一个缓存策略叫做LFU, 那么LFU是什么呢?我们本期博客来分下一下LFU: 本篇博客的目录: 一: LRU是什么 二:LRU的实现 三:测试 四: LRU和LFU的区别以及缺陷 五:总结 正文 一:LRU是什么 LFU,全称是:Least Frequently Used,最不经常使用策略,在一段时间内,数据被使用频次最少的,优先被淘汰。 最少使用 ( LFU )是一种 用于管理 计算机内存 的缓存算法 。主要是记录和追踪内存块的使用次数, 当缓存已满并且需要更多空间时,系统将以最低内存块使用频率清除内存. 采用LFU算法的最简单方法是为每个加载到缓存的块分配一个计数器。每次引用该块时,计数器将增加一。当缓存达到容量并有一个新的内存块等待插入时,系统将搜索计数器最低的块并将其从缓存中删除(本段摘自维基百科) 解释: 上面这个图就是一个LRU的简单实现思路,在链表的开始插入元素,然后每插入一次计数一次,接着按照次数重新排序链表