list排序

十大排序算法

a 夏天 提交于 2020-02-13 02:02:07
好好学习算法基础 0、排序算法说明 0.1 排序的定义 对一序列对象根据某个关键字进行排序。 0.2 术语说明 稳定 :如果a原本在b前面,而a=b,排序之后a仍然在b的前面; 不稳定 :如果a原本在b的前面,而a=b,排序之后a可能会出现在b的后面; 内排序 :所有排序操作都在内存中完成; 外排序 :由于数据太大,因此把数据放在磁盘中,而排序通过磁盘和内存的数据传输才能进行; 时间复杂度: 一个算法执行所耗费的时间。 空间复杂度 :运行完一个程序所需内存的大小。 0.3 算法总结 图片名词解释: n: 数据规模 k: “桶”的个数 In-place: 占用常数内存,不占用额外内存 Out-place: 占用额外内存 0.5 算法分类 0.6 比较和非比较的区别 常见的 快速排序、归并排序、堆排序、冒泡排序 等属于 比较排序 。 在排序的最终结果里,元素之间的次序依赖于它们之间的比较。每个数都必须和其他数进行比较,才能确定自己的位置。 在 冒泡排序 之类的排序中,问题规模为n,又因为需要比较n次,所以平均时间复杂度为O(n²)。在 归并排序、快速排序 之类的排序中,问题规模通过 分治法 消减为logN次,所以时间复杂度平均 O(nlogn) 。 比较排序的优势是,适用于各种规模的数据,也不在乎数据的分布,都能进行排序。可以说, 比较排序适用于一切需要排序的情况。 计数排序、基数排序

输入一组单词,并以字典排序,并输出。

杀马特。学长 韩版系。学妹 提交于 2020-02-12 20:52:52
输入一组单词,并以字典排序,以##表示输入完毕,并输出。 西大信管c++期中必考考试题 方法一 利用二维数组 #include<iostream> #include<string> #include<cstring> #include<algorithm> using namespace std; char sorted(int n,char *words); //冒泡排序 main() { cout << "Enter a list of words ,input will be terminated by a line consisting of '##'" << endl; char words[100][46]; //最长的一个单词45个字母 int i; for(i=0;i<100;i++) { cin >> words[i]; if (words[i][1] == '#' && words[i][0] == '#') break; } int n = i-1; cout <<endl << endl << "There are " << n+1 << " words you have input." << endl <<endl; cout << "The original sequence is " <<endl << endl; for (i=0;i<n+1;i++

Leetcode 排序经典

强颜欢笑 提交于 2020-02-12 14:30:20
215:Kth Element 解决问题前,复习给数组排序的 八种经典方法 直接插入排序 此链接 讲述内容比较容易理解 计数排序没有理解 排序 :时间复杂度 O(NlogN),空间复杂度 O(1) public int findKthLargest ( int [ ] nums , int k ) { Arrays . sort ( nums ) ; return nums [ nums . length - k ] ; } 堆 :时间复杂度 O(NlogK),空间复杂度 O(K)。 public int findKthLargest ( int [ ] nums , int k ) { PriorityQueue < Integer > pq = new PriorityQueue < > ( ) ; // 小顶堆 for ( int val : nums ) { pq . add ( val ) ; if ( pq . size ( ) > k ) // 维护堆的大小为 K pq . poll ( ) ; } return pq . peek ( ) ; } 快速选择 :时间复杂度 O(N),空间复杂度 O(1) public int findKthLargest ( int [ ] nums , int k ) { k = nums . length - k ; int l

c++之容器详解

十年热恋 提交于 2020-02-10 15:47:37
5. 类模板编程 有时候继承、包含并不能满足重用代码的需要,这一般在容器类里面体现的尤为突出。例如: 我们定义了一个容器类,Container, 这个Container类可以实现类似verctor一样的工作,能保存数据,能修改数据,并且 数据的类型不限制 ,但是 针对数据的操作都是一样 的。那么类模板编程就成了不二之选了。 1. 定义模板类 这里以栈作为参照对象,定义一个模板类,实现栈一样的功能。 原始代码 class Stack{ private : enum{MAX = 10}; //表示这个Stack容器最多只能装10个。 int top =0 ; //表示最顶上的索引位置 string items[MAX]; //定义一个数组,以便一会装10个元素 public: bool isempty(){ return top == 0; } bool isfull(){ return top == MAX; } //压栈 int push(string val){ if(isfull()){ return -1; } //没有满就可以往里面存 items[top++] = val; } //出栈 string pop(){ if (isempty()){ return ""; } //如果不是空 top 只是指向位置,而数组获取数据,索引从0开始,所以先-- return

scala的函数编程的排序

梦想与她 提交于 2020-02-10 11:26:11
排序 在scala集合中,可以使用以下几种方式来进行排序 sorted默认排序 sortBy指定字段排序 sortWith自定义排序 默认排序 | Sorted 示例 定义一个列表,包含以下元素: 3, 1, 2, 9, 7 对列表进行升序排序 参考代码 scala scala> List(3,1,2,9,7).sorted res16: List[Int] = List(1, 2, 3, 7, 9) 指定字段排序 | SortBy 根据传入的函数转换后,再进行排序 方法签名 scala def sortBy[B](f: (A) ⇒ B): List[A] 方法解析 | sortBy方法 | API | 说明 | | ---------- | ---------- | ------------------------------------------------------------ | | 泛型 | [B] | 按照什么类型来进行排序 | | 参数 | f: (A) ⇒ B | 传入函数对象 接收一个集合类型的元素参数 返回B类型的元素进行排序 | | 返回值 | List[A] | 返回排序后的列表 | 示例 有一个列表,分别包含几下文本行:“01 hadoop”, “02 flume”, “03 hive”, “04 spark” 请按照单词字母进行排序 参考代码

算法系列【希尔排序】篇

|▌冷眼眸甩不掉的悲伤 提交于 2020-02-09 05:18:56
常见的内部排序算法有:插入排序、希尔排序、选择排序、冒泡排序、归并排序、快速排序、堆排序、基数排序等。用一张图概括: 关于时间复杂度 : 1. 平方阶 (O(n2)) 排序各类简单排序:直接插入、直接选择和冒泡排序。 2. 线性对数阶 (O(nlog2n)) 排序快速排序、堆排序和归并排序; 3. O(n1+§))排序,§ 是介于 0 和 1 之间的常数。希尔排序 4. 线性阶 (O(n)) 排序基数排序,此外还有桶、箱排序。 关于稳定性 : 稳定的排序算法:冒泡排序、插入排序、归并排序和基数排序。 不是稳定的排序算法:选择排序、快速排序、希尔排序、堆排序。 名词解释 : n :数据规模 k :“桶”的个数 In-place :占用常数内存,不占用额外内存 Out-place :占用额外内存 稳定性 :排序后 2 个相等键值的顺序和排序之前它们的顺序相同 希尔排序 希尔排序(Shell Sort)是插入 排序 的一种。是针对直接插入排序 算法 的改进。该方法又称缩小 增量 排序,因DL.Shell于1959年 提出 而得名。 希尔排序,也称递减增量排序算法,是插入排序的一种更高效的改进版本。但希尔排序是非稳定排序算法。 希尔排序是基于插入排序的以下两点性质而提出改进方法的: 插入排序在对几乎已经排好序的数据操作时,效率高,即可以达到线性排序的效率; 但插入排序一般来说是低效的

2.1.2 列表常用方法

与世无争的帅哥 提交于 2020-02-09 02:04:04
  《象》曰“君子以同而异”。对于Python中不同的序列类型而言,有很多方法是通用的,而不同类型的序列又有一些特有的方法或支持某些特有的运算符。常用的列表对象方法如下表所示。此外,Python的很多内置函数和命令也可以对列表和其他序列对象进行操作。后面章节中将通过一些案例陆续进行介绍。 方法 说明 lst.append(x) 将元素x添加至列表lst尾部 lst.extend(L) 将列表L中所有元素添加至列表lst尾部 lst.insert(index,x) 在列表lst指定位置index处添加元素 x,该位置后面的所有元素后移一个位置 lst.remove(x) 在列表lst中删除首次出现的指定元素,该元素之后的所有元素前移一个位置 lst.pop([index]) 删除并返回列表lst中下标为index(默认为-1)的元素 lst.clear() 删除列表lst中的所有元素,但保留列表对象 lst.index(x) 返回列表lst中第一个值为x的元素的下标,若不存在值为x的元素则抛出异常 lst.count(x) 返回指定元素x在列表lst中的出现次数 lst.reverse() 对列表所有元素进行排序 lst.sort(key=None,reverse=False) 对列表lst中的元素进行排序,key用来指定排序依据(是自定义函数名),reverse决定 升序

【数论】C018_按奇偶排序数组 I(双 list 存储 | 双端队列模拟 | 双指针)

牧云@^-^@ 提交于 2020-02-07 12:28:32
一、题目描述 Given an array A of non - negative integers , return an array consisting of all the even elements of A , followed by all the odd elements of A . You may return any answer array that satisfies this condition . Input : [ 3 , 1 , 2 , 4 ] Output : [ 2 , 4 , 3 , 1 ] The outputs [ 4 , 2 , 3 , 1 ] , [ 2 , 4 , 1 , 3 ] , and [ 4 , 2 , 1 , 3 ] would also be accepted . 二、题解 解题思路有三: 双 list 分别存储奇偶数 双端队列存储 双指针(基于交换排序) 方法一:双 list 存储 数组 A A A 中所有的偶数单独存储在 e v e n L i s t evenList e v e n L i s t 中,所有的奇数单独存储在 o d d L i s t oddList o d d L i s t 中,最终,先遍历 e v e n L i s t evenList e v e n L i s t ,后遍历 o d d

【算法】排序算法之快速排序

巧了我就是萌 提交于 2020-02-06 08:58:41
概念 快速排序是由东尼·霍尔所发展的一种排序算法。在平均状况下,排序 n 个项目要 Ο(nlogn) 次比较。在最坏状况下则需要 Ο(n2) 次比较,但这种状况并不常见。事实上,快速排序通常明显比其他 Ο(nlogn) 算法更快,因为它的内部循环(inner loop)可以在大部分的架构上很有效率地被实现出来。 快速排序使用 分治法 (Divide and conquer)策略来把一个串行(list)分为两个子串行(sub-lists)。 快速排序又是一种分而治之思想在排序算法上的典型应用。本质上来看,快速排序应该算是在冒泡排序基础上的递归分治法。 快速排序的名字起的是简单粗暴,因为一听到这个名字你就知道它存在的意义,就是快,而且效率高!它是处理大数据最快的排序算法之一了。虽然 Worst Case 的时间复杂度达到了 O(n²),但是人家就是优秀,在大多数情况下都比平均时间复杂度为 O(n logn) 的排序算法表现要更好,可是这是为什么,在《算法艺术与信息学竞赛》上找到了满意的答案: 快速排序的最坏运行情况是 O(n²),比如说顺序数列的快排。但它的平摊期望时间是 O(nlogn),且 O(nlogn) 记号中隐含的常数因子很小,比复杂度稳定等于 O(nlogn) 的归并排序要小很多。所以,对绝大多数顺序性较弱的随机数列而言,快速排序总是优于归并排序。 算法步骤

sort()&sorted()

懵懂的女人 提交于 2020-02-06 07:17:09
列表的sort()和sorted()方法 sort()与sorted()的不同在于,sort是在原位重新排列列表,而sorted()是产生一个新的列表。 sort 是应用在 list 上的方法,sorted 可以对所有可迭代的对象进行排序操作。 注:sorted不是列表方法。 1. sort ( ) 方法 sort函数的原型   sort ( key = None , reverse = False )   key 可指定一些规则,可以是k = int , k = len , k = function函数   reverse 默认值是 False   可以给它赋值成 True ,那就是反向排序   简单的列表排序 l = [ 1 , 7 , 4 , 9 , 2 , 3 , 5 , 0 , 8 , 6 ] l . sort ( ) print ( l ) 结果: [ 0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 ] #类表中嵌套其他数据类型,如字典 # a = [{'id':1,'name':'小明'},{'id':3,'name':'小红'},{'id':2,'name':'老王'}] # 根据字典的key值id进行降序排序并输出排序后的列表。 def function ( date ) : print ( date ) print ( date [