list排序

20182327 2019-2020-1 《数据结构与面向对象程序设计》第八周学习总结

拜拜、爱过 提交于 2019-12-03 10:46:09
20182327 2019-2020-1 《数据结构与面向对象程序设计》第八周学习总结 教材学习内容总结 1、 查找算法的总结 - 线性查找,通过依次遍历所要查找元素的集合,比较是否存在所需查找的元素,直到找到该元素或返回false表明集合不存在该元素。实现较为简单,==但当集合元素数量巨大时,效率极慢==。 - - 二分法查找,通过每次将集合分为两部分,比较所需查找的元素位于中间元素的左半区还是右半区,依次进行二分,直至找到元素,或返回false。效率较高,例如,一个含义一百万元素的集合,只需20次左右即可完成查找。==但二分法的实现需要基于一个有序数组,否则无法实现。== 2、排序算法的总结 - 顺序排序——选择排序法,选择排序法每遍历列表依次,找到当前最小元素,将其与列表左侧元素交换,最终将所有元素进行排序。 - - 顺序排序——插入排序法,从最左侧元素开始,与其余元素比较,产生一个初步的排序子集,每当下一个比较的元素小于排序子集的最右元素时,经过与子集元素比较,将其插入到子集的顺序位置。子集不断向右与剩余元素进行比较,直至完成排序。 - - 顺序排序——冒泡排序,将列表中的元素,从左端开始,两个元素比较大小,若左大右小,两个交换位置,一直往复,将最大元素置于最右位置。每次排序都将当前最大的交换到最右 - 快速排序,使用递归的思想。以一个元素为界限,小在左,大在右

20182310第八周学习总结

眉间皱痕 提交于 2019-12-03 10:45:27
20182310 2019-2020-1 《数据结构与面向对象程序设计》第八周学习总结 教材学习内容总结 1.泛型 之前涉及过通过继承实现多态,而Object则是所有类型的父类,因此只要将一个数组指向Object类型,那么该数组理论上就可以保存所有类型的数据了,这是一种极端情况 但是,当使用了Object后,容易出现兄弟类型之间转换的问题,编译不会报错,但是运行时会出错。 泛型:可以定义一个类,可以保存数据及操作,但只有当实例化时才确定类型(一般用T来表示泛型) class Box { T类型对象的声明与操作代码 } 当要使用Box定义的数据时,通过实例化来实现它的具体类型,来替代T Box box1=new Box ; Box box2=new Box ; ... 2.线性查找法 线性查找法就是从头开始查找,与每一个列表中的元素进行比较,直到找到该目标元素或查找到末尾还没找到。 以下的方法实现了一个线性查找。该方法返回一个布尔值,若是true,便是找到该元素,否则为false,表示没找到。 public static boolean linearSearch(T[] data, int min, int max, T target) { int index = min; boolean found = false; while (!found && index <= max) {

干货 | 十大经典排序算法最强总结(内含代码实现)

不羁岁月 提交于 2019-12-03 09:59:36
干货 | 十大经典排序算法最强总结(内含代码实现) 一、算法分类 十种常见排序算法可以分为两大类: 比较类排序: 通过比较来决定元素间的相对次序,由于其时间复杂度不能突破O(nlogn),因此也称为非线性时间比较类排序。 非比较类排序: 不通过比较来决定元素间的相对次序,它可以突破基于比较排序的时间下界,以线性时间运行,因此也称为线性时间非比较类排序。 二、算法复杂度 三、算法相关概念 稳定: 如果a原本在b前面,而a=b,排序之后a仍然在b的前面。 不稳定: 如果a原本在b的前面,而a=b,排序之后 a 可能会出现在 b 的后面。 时间复杂度: 对排序数据的总的操作次数。反映当n变化时,操作次数呈现什么规律。 空间复杂度: 是指算法在计算机 内执行时所需存储空间的度量,它也是数据规模n的函数。 四、具体说明 1、冒泡排序 冒泡排序(Bubble Sort)也是一种简单直观的排序算法。 它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端。 作为最简单的排序算法之一,冒泡排序给我的感觉就像 Abandon 在单词书里出现的感觉一样,每次都在第一页第一位,所以最熟悉。冒泡排序还有一种优化算法,就是立一个 flag,

Java集合框架之Map实例解析

為{幸葍}努か 提交于 2019-12-03 09:35:56
1、Map概述 1.1 什么是Map Map是将 键映射到值( key-value ) 的对象。一个映射 不能包含重复的键 ;每个键最多只能映射到一个值。Map 接口提供三种collection 视图,允许以 键集 (keySet())、 值集 (values())或 键-值映射关系集 (entrySet())的形式查看某个映射的内容( 即获取键值对的内容 )。 映射顺序定义为迭代器在映射的 collection 视图上返回其元素的顺序,即 可以映射得到键、值和键-值的Set集合 ,元素的顺序是由得到的Set集合所决定的。某些映射实现可明确保证其顺序,如 TreeMap 类;另一些映射实现则不保证顺序,如 HashMap 类 。 1.2 Map与Collection的区别 1.Map 存储的是键值对形式的元素,键唯一,值可以重复。 2.Collection 存储的是单列元素,子接口Set元素唯一,子接口List元素可重复。 3.Map集合的数据结构值针对键有效,跟值无关,Collection集合的数据结构是针对元素有效 关于Collection可以戳这里 java集合框架之Collection实例解析 2、Map继承体系 下面列出了常见Map集合的继承体系与他们的特点 ---Map 键唯一 |------HashMap 基于哈希表的 Map 接口的实现。此实现提供所有可选的映射操作

python基础--选择排序

六月ゝ 毕业季﹏ 提交于 2019-12-03 08:03:06
1.首先用一张图来描述选择排序的具体过程    2.废话不多说,上代码 1 # 1.定义函数:选择排序 2 def choose_sort(list): 3 list_len = len(list) 4 for i in range(0, list_len): 5 for j in range(i + 1, list_len): 6 if list[i] > list[j]: 7 list[i], list[j] = list[j], list[i] 8 9 # 2.创建列表测试 10 list1 = [3, 6, 1, 8, 5, -20, 100, 50, 200] 11 choose_sort(list1) 12 print(list1) # [-20, 1, 3, 5, 6, 8, 50, 100, 200] 来源: https://www.cnblogs.com/jeffrey04118110/p/11784241.html

快速排序,归并排序,堆排序的数组和单链表实现

和自甴很熟 提交于 2019-12-03 07:11:42
原文链接: https://www.cnblogs.com/DarrenChan/p/8807112.html 这三个排序的时间复杂度都是O(nlogn),所以这里放到一起说。 回到顶部 1. 快速排序 # 快速排序(英语:Quicksort),又称划分交换排序(partition-exchange sort),通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。 步骤为: 从数列中挑出一个元素,称为"基准"(pivot), 重新排序数列,所有元素比基准值小的摆放在基准前面,所有元素比基准值大的摆在基准的后面(相同的数可以到任一边)。在这个分区结束之后,该基准就处于数列的中间位置。这个称为分区(partition)操作。 递归地(recursive)把小于基准值元素的子数列和大于基准值元素的子数列排序。 递归的最底部情形,是数列的大小是零或一,也就是永远都已经被排序好了。虽然一直递归下去,但是这个算法总会结束,因为在每次的迭代(iteration)中,它至少会把一个元素摆到它最后的位置去。 最优时间复杂度:O(nlogn) 最坏时间复杂度:O(n2) 稳定性:不稳定 从一开始快速排序平均需要花费O(n log n)时间的描述并不明显

[Python]CCF——数字排序(201503-2)

。_饼干妹妹 提交于 2019-12-03 04:50:24
数字排序 一、问题描述 问题描述    给定n个整数,请统计出每个整数出现的次数,按出现次数从多到少的顺序输出。 输入格式 输入的第一行包含一个整数n,表示给定数字的个数。   第二行包含n个整数,相邻的整数之间用一个空格分隔,表示所给定的整数。 输出格式   输出多行,每行包含两个整数,分别表示一个给定的整数和它出现的次数。按出现次数递减的顺序输出。如果两个整数出现的次数一样多,则先输出值较小的,然后输出值较大的。 样例输入 12 5 2 3 3 1 3 4 2 5 2 3 5 样例输出 样例输出 3 4 2 3 5 3 1 1 4 1 评测用例规模与约定 1 ≤ n ≤ 1000,给出的数都是不超过1000的非负整数。 # 数字排序 n = int(input()) a = list(map(int,input().split())) s = {} for i in a: s[i] = a.count(i) sort_s = sorted(s.items(),key= lambda x:(-x[1],x[0])) for i in sort_s: print(i[0],i[1]) 分析 利用列表来储存数据,并用字典来记录每个数字出现的次数 对字典进行排序:根据value降序然后再对key升序,即得到想要的顺序了。 来源: https://www.cnblogs.com

MongoDB查询转对象时出错 Element '_id' does not match any field or property of class

左心房为你撑大大i 提交于 2019-12-03 02:23:49
参考:https://www.cnblogs.com/94cool/p/6230202.html 解决方法: 1、在实体类加:[BsonIgnoreExtraElements] 2、或者定义public ObjectId _id { get; set; } 例子: [BsonIgnoreExtraElements] public class BaseData { // public ObjectId _id { get; set; } public string cNo { get; set; } public string customer { get; set; } public long batchNo { get; set; } public DateTime mDate { get; set; } public string mUser { get; set; } } 顺便保存下数据库帮助类 public class MongoDBHelper { #region 构造函数(初始化集合,子类需重写集合名) /// <summary> /// 集合 /// </summary> public string _collName { get; set; } public MongoDBHelper(string collName) { this._collName =

记录:列表排序(二)

匿名 (未验证) 提交于 2019-12-03 00:29:01
文章来源――JAVA程序员成功面试秘籍 冒泡排序 。效率低,最坏情况性能是O(n*n),最好情况性能是O(n)。 //伪代码 for i between 0 and ( array length - 2 ) if ( array [ i + 1 ]< array [ i ]) 交换 array [ i ]和 array [ i + 1 ] 一直重复,直到在一次完整的迭代中没有元素被交换 //冒泡排序例子 public void bubbleSort ( int [] numbers ){ boolean numbersSwitched ; do { numberSwitched = false ; for ( int i = 0 ; i < numbers . length - 1 ; i ++){ if ( numbers [ i + 1 ] < numbers [ i ]){ int temp = numbers [ i + 1 ]; numbers [ i + 1 ] = numbers [ i ]; numbers [ i ] = temp ; numbersSwitched = true ; } } } while ( numbersSwitched ); } 2. 插入排序 。 算法返回值是一个新的List,而且是链表LinkedList的实例

map如何进行排序,并且取排序后的前三数据

匿名 (未验证) 提交于 2019-12-03 00:22:01
首先定义Map并且赋值。 Map<String, Integer> map = new HashMap<String, Integer>(); /* Collections.sort(list, new PriceComparator()) 参数一:需要排序的list 参数二:比较器,实现Comparator接口的类,返回一个int型的值,就相当于一个标志,告诉sort方法按什么顺序来对list进行排序。 Comparator是个接口,可重写compare()及equals()这两个方法,用于比较功能;如果是null的话,就是使用元素的默认顺序,如a,b,c,d,e,f,g,就是a,b,c,d,e,f,g这样,当然数字也是这样的。 compare(a,b)方法:根据第一个参数小于、等于或大于第二个参数分别返回负整数、零或正整数。 equals(obj)方法:仅当指定的对象也是一个 Comparator,并且强行实施与此 Comparator 相同的排序时才返回 true。 */ 定义一个list,并且把map存进去 List<Map.Entry<String, Integer>> list = new ArrayList<Map.Entry<String, Integer>>(); for (Map.Entry<String, Integer> entry : list) { /