list排序

python排序算法

最后都变了- 提交于 2019-11-27 19:31:46
冒泡排序 原理: 取序列的第一个元素,与序列剩余的元素比较,如果第一个元素大于剩余序列的某个元素,那么就交换他们的位置。 代码展示: 1 L = [26,54,93,17,77,31,44,55,20] 2 3 def maopao(list): 4 for i in range(len(list)): 5 for g in range(i+1,len(list)): 6 if list[i] > list[g]: 7 list[i],list[g] = list[g],list[i] 8 print(list) 选择排序 原理: 首先在未排序的序列中找到最小或最大的元素,存放到序列的起始或末尾位置,然后在从剩余未排序元素中继续寻找最小或最大的元素,然后放到剩余未排序序列的起始或者末尾位置。 代码展示: 1 def xuanze(list): 2 n = len(list) 3 while n > 0 : 4 list[list.index(max(list[:n]))],list[n-1]=list[n-1],list[list.index(max(list[:n]))] 5 n -= 1 6 print(list) 来源: https://www.cnblogs.com/marslyn/p/11374328.html

pymongo问题集合

你说的曾经没有我的故事 提交于 2019-11-27 18:27:59
1. 问题: 使用sort排序,代码如下: db.test.find().sort({"name" : 1, "age" : 1}) 遇到如下异常: TypeError: if no direction is specified, key_or_list must be an instance of list 解决方法: db.test.find().sort([("name", 1), ("age" , 1)]) 原因:在python中只能使用列表进行排序,不能使用字典 来源: https://www.cnblogs.com/wsnan/p/11372209.html

Java 常用的转换、排序

心已入冬 提交于 2019-11-27 17:04:57
1 字符串、数组、集合的转换 定义字符串数组 String[] strArr String[] strArr = {"Red", "Green", "Blue"}; 1.1 字符串数组转集合 List<String> list = Arrays.asList(strArr); 1.2 字符串集合转数组 String[] strArrNew = list.toArray(new String[0]); 1.3 字符串集合转逗号分隔的字符串 String str = String.join(",", list); 1.4 逗号分隔的字符串转字符串集合 List<String> list2 = new ArrayList<>(Arrays.asList(str.split(","))); 1.5 对象集合转 Map<String, Integer> 定义对象 Person private static class Person { private String name; private Integer age; } 定义对象 Person 的集合 List List<Person> personList = Lists.newArrayList( new Person("Jordan", 38), new Person("O'Neal", 34), new Person("James"

Java中的比较器(排序)

ε祈祈猫儿з 提交于 2019-11-27 16:45:11
“顺序“在任何一个领域里都是非常重要的一个概念,程序也不例外。不同的执行顺序,能对你的执行结果产生直接影响。 既然涉及到顺序,那就要求排序。所以本文讨论的就是排序中使用到的比较器Comparable和Comparator。 Comparable和Comparator都是java.包下的两个接口,从字面上看这两个接口都是用来做比较用的,但是jdk里面不可能定义两个功能相同的接口,所以他们肯定有不同的用处。 JDK中的Comparable和 Comparator Comparable和Comparator接口都是为了对类进行比较,众所周知,诸如Integer,double等基本数据类型,java可以对他们进行比较,而对于类的比较,需要人工定义比较用到的字段比较逻辑。 Comparable Comparable可以认为是一个内比较器,实现了Comparable接口的类有一个特点,就是这些 类是可以和自己比较的。 若一个类实现了Comparable接口,就意味着该类支持排序。实现了Comparable接口的类的对象的列表或数组可以通过Collections.sort或Arrays.sort进行自动排序。 此外,**实现此接口的对象可以用作有序映射中的键或有序集合中的集合,无需指定比较器。**该接口定义如下 // @since 1.2 出现得还是稍微偏晚的 public interface

十大经典排序算法(Python,Java实现)

旧城冷巷雨未停 提交于 2019-11-27 16:29:21
参照: https://www.cnblogs.com/wuxinyan/p/8615127.html     https://www.cnblogs.com/onepixel/articles/7674659.html 一.排序算法分类:   比较类排序 :通过比较来决定元素间的相对次序,由于其时间复杂度不能突破O(nlogn),因此也称为非线性时间比较类排序。 非比较类排序 :不通过比较来决定元素间的相对次序,它可以突破基于比较排序的时间下界,以线性时间运行,因此也称为线性时间非比较类排    二.算法复杂度    注(相关概念): 稳定 :如果a原本在b前面,而a=b,排序之后a仍然在b的前面。 不稳定 :如果a原本在b的前面,而a=b,排序之后 a 可能会出现在 b 的后面。 时间复杂度 :对排序数据的总的操作次数。反映当n变化时,操作次数呈现什么规律。 空间复杂度: 是指算法在计算机内执行时所需存储空间的度量,它也是数据规模n的函数。 内部排序 :据记录在内存中进行排序。(插入排序,希尔排序,冒泡排序等)【归并排序既可以实现内部排序,也可以实现外部排序,如多路归并排序等】 外部排序: 一般数据量较大 , 排序过程中需要访问外存。(计数排序,桶排序,基数排序) 三.十大经典排序及实现(Python/Java)   1.冒泡排序(Bubble Sort):    

Comparable与Comparator

只愿长相守 提交于 2019-11-27 16:08:18
Comparable comparable是java的接口,该接口对实现它的每个类的对象进行整体排序。 compareTo 方法被称为它的比较方法。实现此接口的对象列表或数组可以通过 Collections.sort或 Arrays.sort进行自动排序,而无需指定比较器。 Comparator comparator也是java的接口,对任意类型集合对象进行整体排序,排序时将此接口的实现传递给Collections.sort方法或者Arrays.sort方法排序。   两者的作用类似,并没有什么区别,comparator更像是对comparable的补充。比如我们定义了一个Grade类(学生成绩),该类包括了学生id、语文成绩与数学成绩,此时Grade实现Comparable接口, 重写compareTo()方法,实现按语文成绩排序。但如果需要用到按数学成绩排序的序列时,可以使用Comparator重新定义排序规则,而不需要去修改原来的排序规则。以下为代码实现: public class Grade implements Comparable<Grade>{ private String stuId; private int chinese; private int math; public String getStuId() { return stuId; } public

排序算法----快速排序

牧云@^-^@ 提交于 2019-11-27 14:15:08
快速排序 将列表中第一个元素设定为基准数字,赋值给mid变量,然后将整个列表中比基准小的数值放在基准的左侧,比基准到的数字放在基准右侧。然后将基准数字左右两侧的序列在根据此方法进行排放。 定义两个指针,low指向最左侧,high指向最右侧 然后对最右侧指针进行向左移动,移动法则是,如果指针指向的数值比基准小,则将指针指向的数字移动到基准数字原始的位置,否则继续移动指针。 如果最右侧指针指向的数值移动到基准位置时,开始移动最左侧指针,将其向右移动,如果该指针指向的数值大于基准则将该数值移动到最右侧指针指向的位置,然后停止移动。 如果左右侧指针重复则,将基准放入左右指针重复的位置,则基准左侧为比其小的数值,右侧为比其大的数值。    1 #方式一:此方法理解简单,但是系统资源占用过大 2 def quick_sort(int_list): 3 if len(int_list) <= 1: return int_list 4 # divide = int_list.pop() 5 divide=int_list[-1] 6 greater_list, lesser_list = [], [] 7 for element in int_list[:-1]: 8 greater_list.append(element) if divide < element else lesser_list

选择排序

笑着哭i 提交于 2019-11-27 14:14:06
选择排序   选择排序改进了冒泡排序,每次遍历列表只做一次交换。为了做到这一点,一个选择排序在他遍历时寻找最大的值,并在完成遍历后,将其放置在正确的位置。         1 """ 2 选择排序 3 """ 4 5 6 def select_sort(int_list): 7 length = len(int_list) 8 if length <= 1: return int_list 9 # 选择排序的循环次数 10 for i in range(length - 1): 11 # 假定索引为0的元素为最大值 12 index = 0 13 # 对未排序的元素进行循环遍历与假定最大值比较 14 for j in range(1, length - i): 15 # 如果未排序的元素大于假定的最大值,修改最大值索引 16 if int_list[j] > int_list[index]: 17 index = j 18 # 每次循环找到最大值与未排序元素的最后一个交换 19 int_list[j], int_list[index] = int_list[index], int_list[j] 20 return int_list 21 22 23 # print(select_sort([11,3,5,89,1])) 24 if __name__ == '__main__':

排序算法 - 基数排序

為{幸葍}努か 提交于 2019-11-27 11:03:45
基本思想 基数排序是借助“分配”和“收集”两种操作对单逻辑关键字进行排序的一种内部排序方法。 数组下标从0-9,每个数组元素是一个链表 比如对一些三位数以内的树排序,先将个位的数值插入对应的下标的链表中,然后再放回原数组,放回的顺序和插入的顺序一致,将链表清空,再将十位的数字插入对应的下标的链表中,依次操作,最终数组中的数据便以完成排序。 算法代码 1 //基数排序 2 int GetKey(int value, int k) //获取一个数的第k位数字 3 { 4 int key; 5 while (k > 0) 6 { 7 key = value % 10; 8 value /= 10; 9 k--; 10 } 11 return key; 12 } 13 14 void Distribube(int *arr, int n, int k, list<int> *lists) //分配 15 { 16 for (int i = 0; i < n; ++i) 17 { 18 int index = GetKey(arr[i], k); 19 lists[index].push_back(arr[i]); 20 } 21 } 22 23 void Collect(int *arr, list<int> *lists) //收集 24 { 25 int index = 0; 26

输入一个string字符串,然后首先根据长度排序,如果长度相同则根据字符排序

╄→尐↘猪︶ㄣ 提交于 2019-11-27 10:20:35
最近在面试,这是遇到的一道习题。不难只是需要思路的转变 思路: 1.输入字符串后排序(其实可以不要) 2.用HashMap键值对处理值的大小 3.定义排序规则(因为hashmap不是list的子类,所以hashmap不支持collections.sort排序,必须转换为list在进行排序操作) 4.然后就可以输出了 public class Demo1 { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); String str = scanner.next(); count(str); } public static void count(String str) { HashMap<Character, Integer> hashMap = new HashMap<Character, Integer>(); char[] chars = str.toCharArray(); Arrays.sort(chars); // 排序 for (int i = 0; i < chars.length; i++) { char temp = chars[i]; Integer temp1 = hashMap.get(temp); if (temp1 == null) {