list排序

python 十大经典排序算法

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

Java Set集合的详解

拜拜、爱过 提交于 2019-11-30 02:56:55
一,Set Set:注重独一无二的性质,该体系集合可以知道某物是否已近存在于集合中,不会存储重复的元素 用于存储无序(存入和取出的顺序不一定相同)元素,值不能重复。 对象的相等性 引用到堆上同一个对象的两个引用是相等的。如果对两个引用调用hashCode方法,会得到相同的结果,如果对象所属的类没有覆盖Object的hashCode方法的话,hashCode会返回每个对象特有的序号(java是依据对象的内存地址计算出的此序号),所以两个不同的对象的hashCode值是不可能相等的。 如果想要让两个不同的Person对象视为相等的,就必须覆盖Object继下来的hashCode方法和equals方法,因为Object hashCode方法返回的是该对象的内存地址,所以必须重写hashCode方法,才能保证两个不同的对象具有相同的hashCode,同时也需要两个不同对象比较equals方法会返回true 该集合中没有特有的方法,直接继承自Collection。 ---| Itreable 接口 实现该接口可以使用增强for循环 ---| Collection 描述所有集合共性的接口 ---| List接口 可以有重复元素的集合 ---| ArrayList ---| LinkedList ---| Set接口 不可以有重复元素的集合 案例:set集合添加元素并使用迭代器迭代元素。

冒泡排序及优化详解

和自甴很熟 提交于 2019-11-30 02:41:38
算法思想 #   冒泡排序属于一种典型的交换排序。   交换排序顾名思义就是通过元素的两两比较,判断是否符合要求,如过不符合就交换位置来达到排序的目的。冒泡排序名字的由来就是因为在交换过程中,类似水冒泡,小(大)的元素经过不断的交换由水底慢慢的浮到水的顶端。   冒泡排序的思想就是利用的比较交换,利用循环将第 i 小或者大的元素归位,归位操作利用的是对 n 个元素中相邻的两个进行比较,如果顺序正确就不交换,如果顺序错误就进行位置的交换。通过重复的循环访问数组,直到没有可以交换的元素,那么整个排序就已经完成了。 示例 #   我们通过一个示例来理解一下基本的冒泡排序,假设当前我们有一个数组 a,内部元素为 3,4,1,5,2,即初始状态,如下图所示。我们的目的就是通过 n 趟比较来实现有底向上从大到小的的顺序。 第一遍排序 #   我们首先进行第一遍排序,如下图所示,红色代表当前比较的元素,绿色代表已经归位的元素。   (1)比较第一个和第二个元素,4>3,交换。   (2)比较第二个和第三个元素,1<3,不交换。   (3)比较第三个和第四个元素,5>1,交换。   (4)比较第四个和第五个元素,2>1,交换。   最后,我们可以看到 1 已经位于最顶部。第一遍需要尽心四次比较才能把五个数比较完。 第二遍排序 #   第二遍排序的初始状态是第一遍排序的最终状态,即4,3,5,2,1

冒泡排序

与世无争的帅哥 提交于 2019-11-30 01:42:59
冒泡排序主要思想:两两比较待排序的关键字,并交换不满足次序要求的那对数,直到整个表都满足次序要求为止。 例如升序:就是将每个数字与其第二个数字进行比较,如果签个数字大于后一个则两个数字交换位置 java package com.rs; public class Test { public static void main(String[] args) { int[] arr = {3,2,5,6,2,7,10,9}; for (int i = 0; i < arr.length; i++) { for (int j = i+1; j < arr.length; j++) { int tmp; if (arr[i]>arr[j]) { tmp = arr[j]; arr[j] = arr[i]; arr[i] = tmp; } } } for (int i = 0; i < arr.length; i++) { System.out.print(arr[i]); } } } python(加入一个bchange,如果第一此已经是正序或者反序,则不需要进行排序) def bubbleSort(input_list): if len(input_list) == 0: return [] sorted_list = input_list for i in range(len(sorted

ArrayList和LinkedList

旧街凉风 提交于 2019-11-29 22:31:22
ArrayList高级 equals()方法 ​ 判断两个ArrayList对象里面的 元素是否全部相等 ,true(相等)、false(不相等)。 import java.util.ArrayList; import java.util.List; public class TestEquals { public static void main(String[] args) { List<String> list = new ArrayList<>(); list.add("aaa"); List<String> list2 = new ArrayList<>(); list2.add("AAA"); //false Java区分大小写 System.out.println(list.equals(list2)); } } isEmpty()方法 ​ 判断当前的 集合是否为空 ,true(为空)、false(非空)。 import java.util.ArrayList; import java.util.List; public class TestIsEmpty { public static void main(String[] args) { List<String> list1 = new ArrayList<>(); //true:此时没有元素,结果true

STL:排序与检索

六眼飞鱼酱① 提交于 2019-11-29 22:14:29
首先来简单介绍一下STL是什么:STL全称“ standard template library”,中文名为“标准模板库”,可以这样说,STL就是“容器”,”算法“和其它一些组件的集合,目前它是c++中的一部分,用c++编写程序时可以直接使用。 STL可分为容器(containers)、迭代器(iterators)、空间配置器(allocator)、配接器(adapters)、算法(algorithms)、仿函数(functors)六个部分。 在C++标准中,STL被组织为下面的17个头文件:< algorithm >、< deque >、< functional >、< iterator >、< array >、< vector >、< list >、<forward_list>、<map>、<unordered_map>、<memory>、< numeric >、< queue >、< set >、<unordered_set>、< stack >和< utility >。 其中容器部分主要由头文件< vector >,<list>,<deque>,<set>,<map>,<stack>和<queue>组成。 算法部分主要由 头文件 <algorithm>,<numeric>和<functional>组成。 那么接下来要要探讨的 排序与检索

leetcode课程排序

时光毁灭记忆、已成空白 提交于 2019-11-29 22:03:11
图的表示方法: (1)邻接矩阵表示方法 0 1 2 3 4 5 6 0 0 1 2 0 0 0 0 1 1 0 1 1 0 0 0 2 1 1 0 0 1 0 0 3 0 1 0 0 1 0 0 4 0 0 1 1 0 1 0 5 0 0 0 0 1 0 1 6 0 0 0 0 0 1 0 (2)邻接表表示方法 0 1 2 1 0 2 3 2 0 1 4 3 1 4 4 2 3 5 5 4 6 6 5 (3)边缘列表表示方法 0 0 1 1 0 2 2 1 2 3 1 3 4 3 4 5 2 4 6 4 5 7 5 6 ArrayList , LinkedList, List的区别 : List是一个接口,ArrayList, LinkedList分别是用两种不同的数据结构实现的两个类: ArrayList是用数组实现的, LinkedList是用链表实现的。 在做实际项目的时候一般用List list = new ArrayList; 而不直接使用 ArrayList = new ArrayList;原因如下: ArrayList是一个类,LIst是一个借口。ArrayList实现并继承了List。 List list = new ArrayList();这句创建了一个ArrayList对象以后上溯到了List。此时他是一个List对象了

Java集合框架

亡梦爱人 提交于 2019-11-29 21:59:09
集合框架体系图 Java集合框架位于java.util包下 短虚线框表示接口,长虚线框表示抽象类,实线框表示类 带三角箭头的实线表示继承关系,由子类指向父类 带三角箭头的虚线表示实现,由类指向接口 带实箭头的虚线表示依赖关系 右下角的Collections和Arrays是工具类 Iterable Iterable是一个接口,实现该接口表明自身可迭代,核心在于实现接口方法iterator()返回一个迭代器 接口方法 default void forEach(Consumer<? super T> action) //对 Iterable的每个元素执行给定的操作,直到所有元素都被处理或动作引发异常。 Iterator<T> iterator() //返回类型为 T元素的迭代器。 default Spliterator<T> spliterator() //在Iterable描述的元素上创建一个Iterable 。 Iterator Iterator是一个接口,定义了遍历集合类的基本方法(由方法可以看出只能支持简单的单向遍历) 由图中可以看出Collection依赖于Iterator,也就是说实现了接口Collection的类都是可迭代对象 接口方法 default void forEachRemaining(Consumer<? super E> action) /

C# 指定索引排序 (原)

此生再无相见时 提交于 2019-11-29 21:57:10
private void test(string[] sortkey_list, string[] list_temp) { //打开excel到dt; string[] strlist = { "4", "2", "3", "1" }; string[] rowws; rowws = new string[] { "AA", "BB", "CC", "DD" }; //第一行加入数组完成; Dictionary<int, string> dir = new Dictionary<int, string>(); int index; //指定索引排序 for (int k = 0; k < rowws.Length; k++) { if (strlist.Length == k) { dir.Clear(); break; } //判断k超过 指定索引 数组的索引时; 终止 index = Convert.ToInt32(strlist[k]); // 指定索引数组中 元素转换为整型 if ((index - 1) == k) { continue; } //索引相同的值保持不变 if ((index - 1) > k) { dir.Add(k, rowws[k]); //保存当前对象 rowws[k] = rowws[index - 1]; // 把索引指向的对象 赋值给当前对象

Java8 新特性之流式数据处理

你说的曾经没有我的故事 提交于 2019-11-29 19:23:01
Java8实战 1 . 简介 什么是流(Stream): 流是Java API的新成员,它允许你以声明性方式处理数据集合(通过查询语句来表达,而不是临时编写一个实现)。就现在来说,你可以把它们看成遍历数据集的高级迭代器. 以下两段代码都是用来返回低热量的菜肴名称,并按照卡路里排序。一个是用Java 7写的,另一个是用Java 8的Stream API写的,大家可以观察一下它们有何区别. Java 7及之前的实现: @RunWith(SpringRunner.class) @SpringBootTest public class ApplicationTest { @Test public void contextLoads() { } public List<Dish> menuList ; @Before public void setUp() throws Exception { menuList = Arrays.asList( new Dish("猪肉", false, 800, Dish.Type.MEAT), new Dish("牛肉", false, 700, Dish.Type.MEAT), new Dish("鸡肉", false, 400, Dish.Type.MEAT), new Dish("薯条", true, 530, Dish.Type.OTHER),