list排序

python算法

南楼画角 提交于 2019-12-20 23:46:22
排序算法可以分为内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部的排序记录,在排序过程中需要访问外存。常见的内部排序算法有:插入排序、希尔排序、选择排序、冒泡排序、归并排序、快速排序、堆排序、基数排序等。用一张图概括 关于时间复杂度: 平方阶 (O(n2)) 排序 各类简单排序:直接插入、直接选择和冒泡排序。 线性对数阶 (O(nlog2n)) 排序 快速排序、堆排序和归并排序。 O(n1+§)) 排序,§ 是介于 0 和 1 之间的常数。 希尔排序。 线性阶 (O(n)) 排序 基数排序,此外还有桶、箱排序。 关于稳定性: 稳定的排序算法:冒泡排序、插入排序、归并排序和基数排序。 不是稳定的排序算法:选择排序、快速排序、希尔排序、堆排序。 名词解释: n:数据规模 k:“桶”的个数 In-place:占用常数内存,不占用额外内存 Out-place:占用额外内存 稳定性:排序后 2 个相等键值的顺序和排序之前它们的顺序相同 冒泡排序 冒泡排序(Bubble Sort)也是一种简单直观的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端。

Comparable接口与Comparator接口

你说的曾经没有我的故事 提交于 2019-12-20 00:28:44
【Comparable和Comparator源码】 java.lang.Comparable public interface Comparable<T> { public int comparaTo(T o); } ------------------------------------------------------------------ java.util.Comparator public interface Comparator<T> { int compare(T o1,T o2); boolean equals(Object obj); } 【Comparable接口】 1. 若一个类实现了Comparable接口,就意味着该类支持排序。假设存在实现了 Comparable接口的类的对象的List列表(或数组),则该List列表(或数组)可以通过Collections.sort(或Arrays.sort)进行排序。 2. 一个类实现了comparable接口表明这个类的对象之间是可以互相比较的。如果用数学语言描述的话就是这个类的对象组成的集合中存在一个全序。这样,这个类对象组成的集合就可以使用 Sort 方法排序了。 【Comparator接口】 1. 我们需要控制某个类的次序,而该类不支持排序(即没有实现Comparable接口)。那么

页面移动排序算法实现

依然范特西╮ 提交于 2019-12-19 08:53:53
页面移动排序算法实现 1.思想 我们用这5条记录来进行排序。 记录1,sort:1;记录2,sort:2;记录3,sort:3;记录4,sort:4;记录5,sort:5 页面展示: 记录5 ,记录4 ,记录3 ,记录2 ,记录1 需求1:记录3往上移动 只需要将它与记录4交换sort值 即可。 需求2:记录3往下移动 只需要将它与记录2交换sort值 即可。 需求3:记录3置顶(上移至第一条) 获取最大排序号为5, 然后加1=6, 修改记录3的sort值为6 即可。 需求4:记录3置底(下移至最后一条) 获取最小排序号为1, 然后减1=0, 修改记录3的sort值为0 即可。 1. 每当新增一条记录的时候,sort都会在前一条记录上+1 2. 查询列表 sql 根据排序字段 降序 上移:取上一条记录排序号,将当前记录与上一条记录排序号置换 下移:取下一条记录排序号,将当前记录与下一条记录排序号调换置换 置顶(上移至第一条):获取最大的记录排序号,修改当前记录的排序号为最大排序号+1 置底(下移至最后一条):获取最小的记录排序号,修改当前记录的排序号为最小排序号-1 2.实现步骤 表加字段 sort_no 用于排序 controller 新增需获取最大排序号加1 排序方法 /** * @param appId 移动的主键 * @param operateType *

LeetCode——Remove Duplicates from Sorted List II

 ̄綄美尐妖づ 提交于 2019-12-19 03:30:04
Given a sorted linked list, delete all nodes that have duplicate numbers, leaving only distinct numbers from the original list. For example, Given 1->2->3->3->4->4->5 , return 1->2->5 . Given 1->1->1->2->3 , return 2->3 . 原题链接:https://oj.leetcode.com/problems/remove-duplicates-from-sorted-list-ii/ 题目:给定一个已排序的链表,删除反复的元素。仅仅留下源链表中唯一出现的那些元素。 思路:首先防止把头节点删除。构建一个虚拟的头节点。 因为是已排序的。相等的元素就在相邻的位置上。发现有相邻的元素。则指针依次向后指,直到没有相等的相邻元素为止。 public ListNode deleteDuplicates(ListNode head) { if (head == null || head.next == null) return head; ListNode dummy = new ListNode(0); dummy.next = head; head = dummy; while

吐血整理系列 Redis与Jedis排序

你离开我真会死。 提交于 2019-12-18 17:02:17
在优锐课学习笔记中,我们将讨论Redis SORT命令。 Redis提供了SORT命令,我们可以使用该命令从LIST,SET或ZSET中检索或存储排序的值。 以最简单的形式,我们可以在KEY上使用命令,如下面的示例所示: SORT numbers_list 这将对键中包含的值进行排序并返回它们。 该命令将值排序为数字。 因此,假设我们有一个包含以下值的列表: 1, 110, 5 上面的命令将返回: 1 5 110 我们可以指定使用ALPHA修饰符按字母顺序对值进行排序。 有许多修饰符。 我们将在下面的示例中查看其中的一些。 这些示例将使用Jedis API。 对于我们的示例,让我们考虑一下我们有一个想法管理系统。 我们有一个包含系统中所有用户名的列表: all:users [junior, francisco, ribeiro, user4] 对于每个用户名,将有一个包含用户信息的哈希: user: user:junior - name: "Junior User" - num_ideas : "5" - email:"fjunior@email.com" user:francisco - name: "Francisco User" - num_ideas: "4" - email: "francisco@email.com" ... 对于我们的示例

【无私分享:从入门到精通ASP.NET MVC】从0开始,一起搭框架、做项目 目录索引

末鹿安然 提交于 2019-12-18 12:56:42
索引 【无私分享:从入门到精通ASP.NET MVC】从0开始,一起搭框架、做项目 目录索引 简述 今天我们写一个基础数据的操作类,如果里面有大家不理解的地方,可采取两种方式,第一:提出来,第二:会用就行。这个类呢我一般不去修改它,因为基础操作类,大家也可以直接拷贝到自己的项目中。 项目准备 我们用的工具是:VS 2013 + SqlServer 2012 + IIS7.5 希望大家对ASP.NET MVC有一个初步的理解,理论性的东西我们不做过多解释,有些地方不理解也没关系,会用就行了,用的多了,用的久了,自然就理解了。 项目开始 一、创建接口 IRepository 我们在应用服务的Service类库下面新建一个接口 IRepository 右击Service类库→添加→新建项→接口 名称 IRepository 二、基础操作的接口方法 不了解接口的朋友需要注意下,接口是个规范,是不需要方法体的,说的通俗点,有了接口如果被继承肯定会有实现,这里你只需要写方法就行了,具体的方法是如何实现的我们不管,爱怎么实现怎么实现,我只是告诉你,你要是继承我这个接口,那么我这些方法你必须实现,而且要符合我规范。这就跟领导一条批示:你给我做个上传图片的方法,返回上传成功或失败。领导就是接口,你是实现类,你在这个领导下面干活,就相当于你继承了领导,那么你必须要完成这个图片上传方法并且返回上传结果

LeetCode.905-按奇偶排序数组(Sort Array By Parity)

孤者浪人 提交于 2019-12-18 12:24:22
这是悦乐书的第 347 次更新,第 371 篇原创 01 看题和准备 今天介绍的是 LeetCode 算法题中 Easy 级别的第 212 题(顺位题号是905)。给定一个非负整数数组A,返回一个由A的所有偶数元素组成的数组,后跟A的所有奇数元素。 你可以返回满足此条件的任何答案数组。例如: 输入:[3,1,2,4] 输出:[2,4,3,1] 说明:[4,2,3,1],[2,4,1,3]和[4,2,1,3]也是正确答案。 注意 : 1 <= A.length <= 5000 0 <= A[i] <= 5000 02 第一种解法 将数组A中的偶数元素存到 List 中,奇数元素存到 List2 中,创建一个新的数组 result ,长度和 A 相等,先遍历 List ,将偶数元素存入result的前面,再遍历 List2 ,将奇数元素跟在偶数元素后面。 此解法的时间复杂度是 O(N) ,空间复杂度是 O(N) 。 public int[] sortArrayByParity(int[] A) { List<Integer> list = new ArrayList<Integer>(); List<Integer> list2 = new ArrayList<Integer>(); int n = A.length; for (int i=0; i<n; i++) { if (A[i

Java集合类的概述

我的未来我决定 提交于 2019-12-18 01:25:38
前述   复习一下Java中的集合类,是面试笔试中常考察的一个点,特地做的整理。 什么是集合类?   集合类,也叫容器类。Java集合类可以用来存储数量庞大的对象。   我们和数组进行对比:   数组:存储基本数据类型,数据类型单一,长度固定,不能动态增大容量。   集合:存储的即可是基本类型的值,也可以是对象,可以存储多种数据类型,长度可变,可以动态增大容量。 Java集合类的体系   Java集合类主要有两个接口派生而出:Collection和Map。即集合类都是实现的这两个接口。我们在实际编程中经常使用的有 List、Set、Queue(这些是实现的 Collection 接口)HashMap、TreeMap、HashTable(这些实现的 Map 接口) Collection接口结构   Collection 接口位于 Java.util 包下,是一个父接口, List、Set、Queue 都是实现的 Collection 接口。Collection 做为父接口提供一些操作集合类的方法,因此它的子接口也有这些方法。   Collection 接口不能被实例化,并且在实际的编程过程中几乎不会使用它进行数据的存储。 Map接口结构   Map 接口实现的是键值对的存储,类似 python 中的 dict。   Map中比较常见的是 HashMap、TreeMap

list排序

放肆的年华 提交于 2019-12-18 00:28:11
(java、android) list排序 写此博文以便翻阅及帮助他人: 排序规则:已置顶的数据按照置顶顺序(编号)进行排序并置于顶部,正常的数据需区分每一天(如17号有N条、16号有N条、15号有N条…)的数据并按照阅读量进行排序后再对日期(17号、16号、15号…)进行倒序排序。 实体类: public class DynamicEntity implements Serializable , Comparable < DynamicEntity > { public static final int DYNAMIC_FOLLOW_DATE = 1 ; //时间 public static final int DYNAMIC_FOLLOW_TOP = 2 ; //置顶编号 public static final int DYNAMIC_FOLLOW_BROWSE = 3 ; //浏览量 private String title ; //标题 private String content ; //描述 private int readCount ; //浏览次数 private long created_at ; //发布时间 private Integer userId ; private String username ; private int topNumber ; /

数据结构笔记17-排序技术

最后都变了- 提交于 2019-12-18 00:24:40
在排序问题中,通常将数据元素称为记录 排序的基本概念 正序:待排序序列中的记录已按关键码排好序。 逆序(反序):待排序序列中记录的排列顺序与排好序的顺序正好相反。 趟:在排序过程中,将待排序的记录序列扫描一遍称为一趟。 通常,一次排序过程需要进行多趟扫描才能完成 排序算法的性能 1.时间复杂性:基本操作。 内排序在排序过程中的基本操作: (1)比较:关键码之间的比较; (2)移动:记录从一个位置移动到另一个位置。 2.空间复杂性: 辅助存储空间。 辅助存储空间是指在数据规模一定的条件下,除了存放待排序记录占用的存储空间 之外,执行算法所需要的其他存储空间。 排序算法的存储结构 从操作角度看,排序是线性结构的一种操作,待排序记录可以用顺序存储结构 或链接存储结构存储。 插入类排序 插入排序的主要操作是插入, 其基本思想是: 每次将一个待排序的记录按其关键码的大小插入到一个已经排好序的有序序列 中,直到全部记录排好序为止。 插入类排序方法有以下两种: 直接插入排序 希尔排序 直接插入排序 基本思想:在插入第 i(i>1)个记录时,前面的 i-1个记录已经排好序。 需解决的关键问题: (1)如何构造初始的有序序列? 解决方法: 将第1个记录看成是初始有序表,然后从第2个记录起依次插入到这个有序表中,直 到将第n个记录插入。 算法描述: for (i=2; i<=n; i++) {