list排序

Java实现八大排序算法

痞子三分冷 提交于 2019-12-15 14:34:07
我对java的八大排序算法进行了总结,以此文展示Java八大算法 常见排序算法如下: 1.直接插入排序 2.希尔排序 3.简单选择排序 4.堆排序 5.冒泡排序 6.快速排序 7.归并排序 8.基数排序 排序方法示例简介 直接插入排序 基本思想 通常人们整理桥牌的方法是一张一张的来,将每一张牌插入到其他已经有序的牌中的适当位置。在计算机的实现中,为了要给插入的元素腾出空间,我们需要将其余所有元素在插入之前都向右移动一位。 算法描述 一般来说,插入排序都采用in-place在数组上实现。具体算法描述如下: 从第一个元素开始,该元素可以认为已经被排序 取出下一个元素,在已经排序的元素序列中从后向前扫描 如果该元素(已排序)大于新元素,将该元素移到下一位置 重复步骤3,直到找到已排序的元素小于或者等于新元素的位置 将新元素插入到该位置后 重复步骤2~5 注意: 如果 比较操作 的代价比 交换操作 大的话,可以采用二分查找法来减少 比较操作 的数目。该算法可以认为是 插入排序 的一个变种,称为二分查找插入排序。 代码实现 /** * 通过交换进行插入排序,借鉴冒泡排序 * * @param a */ public static void sort ( int [ ] a ) { for ( int i = 0 ; i < a . length - 1 ; i ++ ) { for (

八大排序算法python实现合辑

强颜欢笑 提交于 2019-12-15 07:21:54
原文地址: https://zhuanlan.zhihu.com/p/25074334 1.冒泡排序 冒泡排序重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。 这个算法的名字由来是因为越大的元素会经由交换慢慢“浮”到数列的顶端,故名。 步骤: 比较相邻的元素。如果第一个比第二个大,就交换他们两个。 对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。 针对所有的元素重复以上的步骤,除了最后一个。 持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。 代码实现: # -*- coding:utf-8 -*- def bubble_sort ( raw_list ) : length = len ( raw_list ) for index in range ( length ) : for i in range ( 1 , length - index ) : if raw_list [ i - 1 ] > raw_list [ i ] : raw_list [ i ] , raw_list [ i - 1 ] = raw_list [ i - 1 ] , raw_list [ i ] return raw_list

Map根据value排序

拈花ヽ惹草 提交于 2019-12-14 23:40:12
我们经常遇到需要对Map排序的情况,一般根据key排序可以使用TreeMap来保存即可自动排序。那么问题来了,如果需要根据value排序呢,怎么实现? 如题:给定一个字符串数组,输出出现频率最高的k个词,如果出现频率相同,按字典序排序。 分析: 分三步走,1)统计出现频率,使用Map,key为单词,value为出现频率,2)根据频率从大到小排序,3)输出频率topk的单词 话不多说,上代码 public static void printTopK(String[] arr,int k){ Map<String,Integer> map=new HashMap<>(); //统计次数 for (String word:arr){ if (map.containsKey(word)) { int count = map.get(word); map.put(word, count+1); }else { map.put(word,1); } } //排序,转List,重写compare方法,也可以用lamda表达式写 List<Map.Entry<String, Integer>> list = new ArrayList<>(map.entrySet()); list.sort(new Comparator<Map.Entry<String, Integer>>() {

java对象排序

我只是一个虾纸丫 提交于 2019-12-14 09:21:54
我们需要对类按照类中的某一个属性(或者多个属性)来对类的对象进行排序,有两种方法可以实现,一种方法是类实现Comparable<T>接口,然后调用Collections.sort(List)方法进行排序,另一种方法是类不实现Comparable<T>接口,而在排序时使用Collections.sort(List, Comparator<T>)方法,并实现其中的Comparator<T>接口。 先创建一个简单的学生类: public class Student { private String name; private int age; public Student() {} public Student(String name, int age) { this.name = name; this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } } 1、通过类实现Comparable<T>接口进行排序 public class Student

python dict 排序

隐身守侯 提交于 2019-12-13 21:14:29
python dict按照value 排序 我们知道Python的内置dictionary数据类型是无序的,通过key来获取对应的value。可是有时我们需要对dictionary中 的item进行排序输出,可能根据key,也可能根据value来排。到底有多少种方法可以实现对dictionary的内容进行排序输出呢?下面摘取了 一些精彩的解决办法。 #最简单的方法,这个是按照key值排序: def sortedDictValues1(adict): items = adict.items() items.sort() return [value for key, value in items] #又一个按照key值排序,貌似比上一个速度要快点 def sortedDictValues2(adict): keys = adict.keys() keys.sort() return [dict[key] for key in keys] #还是按key值排序,据说更快。。。而且当key为tuple的时候照样适用 def sortedDictValues3(adict): keys = adict.keys() keys.sort() return map(adict.get, keys) #一行语句搞定: [(k,di[k]) for k in sorted(di.keys())]

按属性对自定义对象的ArrayList进行排序

落爺英雄遲暮 提交于 2019-12-13 03:19:05
我读过有关使用 Comparator 对ArrayList进行排序的信息,但在所有示例中,人们都使用了 compareTo ,根据一些研究,它是String的一种方法。 我想按自定义对象的属性之一对ArrayList进行排序: Date 对象( getStartDay() )。 通常,我通过 item1.getStartDate().before(item2.getStartDate()) 因此我想知道是否可以编写如下内容: public class CustomComparator { public boolean compare(Object object1, Object object2) { return object1.getStartDate().before(object2.getStartDate()); } } public class RandomName { ... Collections.sort(Database.arrayList, new CustomComparator); ... } #1楼 我发现,大多数(如果不是全部)这些答案都依赖于基础类(对象)来实现可比的或具有辅助可比的接口。 没有我的解决方案! 以下代码可让您通过了解对象的字符串名称来比较对象的字段。 您可以轻松地修改它而不使用名称,但是随后您需要公开它或构造要与之比较的对象之一。

Java语言——Collections类的方法

為{幸葍}努か 提交于 2019-12-13 01:12:50
1. Collections 这个 java.utils.Collections 是集合工具类,用来对集合进行操作。 常用方法: public static <T> boolean addAll(Collection<T> c, T... elements) :往集合中添加 一些 元素。 public static void shuffle(List<?> list) 打乱顺序 :打乱集合顺序。 public static <T> void sort(List<T> list) :将集合中元素按照默认规则排序。 public static <T> void sort(List<T> list,Comparator<? super T> ) :将集合中元素按照指定规则排序。 代码演示: public class CollectionsDemo { public static void main ( String [ ] args ) { ArrayList < Integer > list = new ArrayList < Integer > ( ) ; //采用工具类 完成 往集合中添加元素 Collections . addAll ( list , 5 , 222 , 1 , 2 ) ; System . out . println ( list ) ; //排序方法

六种常见排序算法(Python语言实现)

半世苍凉 提交于 2019-12-12 23:28:37
文章目录 排序算法总结 常见算法时间复杂度比较 冒泡排序 简介与工作原理: 代码实现 选择排序 插入排序 快速排序 希尔排序 归并排序 排序算法总结 常见算法时间复杂度比较 冒泡排序 简介与工作原理: 简介:是一种简单的排序算法。它重复地遍历要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。遍历数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端。 从第一个元素开始,与相邻的元素进行比较,如果比较结果是升序的,就把这两个元素进行互换 从第一对到最后一对进行比较,对每一对相邻元素重复进行此操作,做完这个操作后,最后一个元素是最大的元素 针对所以的元素再重复以上步骤 持续对越来越少的元素进行以上的步骤,直到没有任何一对数据需要比较为止。 代码实现 #!/usr/local/bin/python 2 # 冒泡排序 3 def bubb_sort ( list ) : 4 L = len ( list ) 5 for j in range ( L , 0 , - 1 ) : 6 for i in range ( j - 1 ) : 7 if list [ i ] > list [ i + 1 ] : 8 list [ i ] , list [ i + 1 ] = list [ i + 1

数组的函数总结

醉酒当歌 提交于 2019-12-12 11:02:03
一.数组的基本概念 数组定义:PHP 中的数组实际上是一个有序映射。映射是一种把 values 关联到 keys 的类型。此类型在很多方面做了优化,因此可以把它当成真正的数组,或列表(向量),散列表(是映射的一种实现),字典,集合,栈,队列以及更多可能性。由于数组元素的值也可以是另一个数组,树形结构和多维数组也是允许的。 数组类型: 索引数组 - 带有数字 ID 键的数组 关联数组 - 带有指定的键的数组,每个键关联一个值 多维数组 - 包含一个或多个数组的数组 二.数组的常用函数 1.统计数组下标函数 count()函数,sizeof()函数 语法:count(array,mode),sizeof(array,mode);array表示数组,必须的;mode表示是否需要递归的计算数组中元素个数,不是必需的,默认是0。 2. each()函数 each( array ), 返回当前元素的键名和键值,并将内部指针向前移动。 返回的数组中包括的四个元素:键名为 0,1,key 和 value。单元 0 和 key 包含有数组单元的键名,1 和 value 包含有数据。 如果内部指针越过了数组范围,本函数将返回 FALSE。 3. list() 函数 list( var1 , var2 ...),函数用于在一次操作中给一组变量赋值。该函数只用于数字索引的数组,且假定数字索引从 0 开始。

java之集合工具类Collections

◇◆丶佛笑我妖孽 提交于 2019-12-12 01:07:46
Collections类简介 java.utils.Collections 是集合工具类,用来对集合进行操作。此类完全由在 collection 上进行操作或返回 collection 的静态方法组成。 常用方法 public static boolean addAll(Collection c, T... elements) :往集合中添加一些元素。 public static void shuffle(List list) 打乱顺序 :打乱集合顺序。 代码举例 package demo03Collections; import java.util.ArrayList; import java.util.Collections; public class Demo01Collections { public static void main(String[] args) { //定义测试用的集合 ArrayList<Integer> arrayList = new ArrayList<>(); //addAll(Collection<T> c, T... elements) :往集合中添加一些元素。 Collections.addAll(arrayList, 1, 2, 3, 4, 5); //查看集合中的元素顺序 System.out.println(arrayList);//