list排序

09-排序2 Insert or Merge (25 分)

岁酱吖の 提交于 2019-12-04 18:49:34
According to Wikipedia: Insertion sort iterates, consuming one input element each repetition, and growing a sorted output list. Each iteration, insertion sort removes one element from the input data, finds the location it belongs within the sorted list, and inserts it there. It repeats until no input elements remain. Merge sort works as follows: Divide the unsorted list into N sublists, each containing 1 element (a list of 1 element is considered sorted). Then repeatedly merge two adjacent sublists to produce new sorted sublists until there is only 1 sublist remaining. Now given the initial

【转载】常见十大经典排序算法及C语言实现【附动图图解】

白昼怎懂夜的黑 提交于 2019-12-04 18:22:48
原文链接: https://www.cnblogs.com/onepixel/p/7674659.html 注意 : 原文中的算法实现都是基于JS,本文全部修改为C实现,并且统一排序接口,另外增加了一些描述信息,后面会持续更新本文。 0、算法概述 0.1 算法分类 十种常见排序算法可以分为两大类: 比较类排序 :通过比较来决定元素间的相对次序,由于其时间复杂度不能突破O(nlogn),因此也称为非线性时间比较类排序。 非比较类排序 :不通过比较来决定元素间的相对次序,它可以突破基于比较排序的时间下界,以线性时间运行,因此也称为线性时间非比较类排序。 0.2 算法复杂度 0.3 相关概念 稳定 :如果a原本在b前面,而a=b,排序之后a仍然在b的前面。 不稳定 :如果a原本在b的前面,而a=b,排序之后 a 可能会出现在 b 的后面。 时间复杂度 :对排序数据的总的操作次数。反映当n变化时,操作次数呈现什么规律。 空间复杂度: 是指算法在计算机内执行时所需存储空间的度量,它也是数据规模n的函数。 0.4 在线学习 这里提供两个算法可视化网站,方便理解这些排序算法: https://visualgo.net/en/sorting https://www.cs.usfca.edu/~galles/visualization/ComparisonSort.html

Stream的排序

℡╲_俬逩灬. 提交于 2019-12-04 15:38:26
1、list<Integer>的正序 List<Integer> list = new ArrayList<>();list.add(50);list.add(45);list.add(25);list.add(98);list.add(32);List<Integer> collect = list.stream().sorted().collect(Collectors.toList());System.out.println("list<Integer>元素正序:" + collect);打印结果:list<Integer>元素正序:[25, 32, 45, 50, 98] 2、list<Integer>的倒序 List<Integer> list = new ArrayList<>();list.add(50);list.add(45);list.add(45);list.add(98);list.add(32);List<Integer> collect = list.stream().sorted(Comparator.reverseOrder()).collect(Collectors.toList());System.out.println("list<Integer>元素倒序:" + collect);打印结果:list<Integer>元素倒序:[98, 50,

十大经典排序算法(动图演示)

有些话、适合烂在心里 提交于 2019-12-04 09:07:30
十大经典排序算法(动图演示) 0、算法概述 0.1 算法分类 十种常见排序算法可以分为两大类: 比较类排序 :通过比较来决定元素间的相对次序,由于其时间复杂度不能突破O(nlogn),因此也称为非线性时间比较类排序。 非比较类排序 :不通过比较来决定元素间的相对次序,它可以突破基于比较排序的时间下界,以线性时间运行,因此也称为线性时间非比较类排序。 0.2 算法复杂度 0.3 相关概念 稳定 :如果a原本在b前面,而a=b,排序之后a仍然在b的前面。 不稳定 :如果a原本在b的前面,而a=b,排序之后 a 可能会出现在 b 的后面。 时间复杂度 :对排序数据的总的操作次数。反映当n变化时,操作次数呈现什么规律。 空间复杂度: 是指算法在计算机 内执行时所需存储空间的度量,它也是数据规模n的函数。 1、冒泡排序(Bubble Sort) 冒泡排序是一种简单的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果它们的顺序错误就把它们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端。 1.1 算法描述 比较相邻的元素。如果第一个比第二个大,就交换它们两个; 对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对,这样在最后的元素应该会是最大的数; 针对所有的元素重复以上的步骤

学习Spring-Data-Jpa(六)---05、spring-data-commons中的repository

大城市里の小女人 提交于 2019-12-04 04:32:37
1、spring-data-commons项目   spring-data-commons项目是所有spring-data项目的核心,我们来看一下该项目下的repository包中的接口和注解。      2、Repository接口和@RepositoryDefinition注解   当中最重要的就是Repository接口了。它是做数据库操作的最底层的抽象接口、最顶级的父类,打开Repository接口看其源码,发现里面其实什么方法都没有,仅仅起到一个标识作用。捕获要管理的域类型和域类的id类型。用途是保存类型信息,并能够在类路径扫描期间发现继承该接口的接口,帮助我们创建代理类。 @Indexed public interface Repository<T, ID> { }   @Indexed 我们发现在Repository接口上有一个@Indexed 注解,是Spring5提供的注解,用于提升应用启动性能。这个注解单独存在不起作用,要想使其生效的话,要添加spring-context-indexer依赖。在编译时会将@CompoentScan扫描指定package中要生成的bean写在METE-INF/spring.components文件中,当项目启动时,就会读取这个文件,不会再扫描指定的package了,从而提升性能。   我们只要继承Repository接口

Python 算法

两盒软妹~` 提交于 2019-12-04 04:25:31
对几种算法做说明: 名称 复杂度 说明 备注 冒泡排序 Bubble Sort O(N*N) 将待排序的元素看作是竖着排列的“气泡”,较小的元素比较轻,从而要往上浮 插入排序 Insertion sort O(N*N) 逐一取出元素,在已经排序的元素序列中从后向前扫描,放到适当的位置 起初,已经排序的元素序列为空 选择排序 O(N*N) 首先在未排序序列中找到最小元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小元素,然后放到排序序列末尾。以此递归。 找最小元素排序 快速排序 Quick Sort O(n *log 2 (n)) 先选择中间值,然后把比它小的放在左边,大的放在右边(具体的实现是从两边找,找到一对后交换)。然后对两边分别使用这个过程(递归)。 确定中间值和索引的排序 堆排序HeapSort O(n *log 2 (n)) 利用堆(heaps)这种数据结构来构造的一种排序算法。堆是一个近似完全二叉树结构,并同时满足堆属性:即子节点的键值或索引总是小于(或者大于)它的父节点。 近似完全二叉树 希尔排序 SHELL O(n 1+ £ ) 0<£<1 选择一个步长(Step) ,然后按间隔为步长的单元进行排序.递归,步长逐渐变小,直至为1. 箱排序 Bin Sort O(n) 设置若干个箱子,把关键字等于 k 的记录全都装入到第k 个箱子里 ( 分配 )

【排序算法】(8)希尔排序

笑着哭i 提交于 2019-12-04 04:15:19
希尔排序 2019-11-10 11:44:39 by冲冲 1、概念 希尔排序(shell排序),是插入排序(直接插入)的增强版。 特点是,在不断缩小增量的过程中,不断地排序,使得在最终使用插入排序时,序列已经基本有序。插入排序在操作基本有序的序列时效率倍增。 2、基本思想 把序列按步长gap分组,对每组小序列采用直接插入排序方法进行排序。 随着步长逐渐减小,所分成的组包含的记录越来越多,当步长的值减小到1时,整个数据合成为一组,构成一组基本有序的序列,进行最后一趟插入排序,完成排序。 例析, 初始时,有一个大小为 10 的无序序列。 在第一趟排序中,设置 gap1 = N / 2 = 5,即相隔距离为 5 的元素组成一组,可以分为 5 组。然后使用直接插入排序的方法对每个组进行排序。 在第二趟排序中,设置 gap2 = gap1 / 2 = 2 (取整数)。即每相隔距离为 2 的元素组成一组,可以分为 2 组。然后使用直接插入排序的方法对每个组进行排序。 在第三趟排序中,设置gap3 = gap2 / 2 = 1。 即相隔距离为 1 的元素组成一组,即只有一组。然后使用直接插入排序的方法对每个组进行排序。此时,排序已经结束。 希尔排序是不稳定性排序:图中有两个相等数值的元素 5 和 5,在排序过程中,两个元素位置交换了。 3、完整代码 1 public class

Java中Collection和Map集合总结

China☆狼群 提交于 2019-12-04 04:03:22
Collection(单列集合) List(有序,可重复) ArrayList 底层数据结构是数组,查询快,增删慢 线程不安全,效率高 Vector 底层数据结构是数组,查询快,增删慢 线程安全,效率低 LinkedList 底层数据结构是链表,查询慢,增删快 线程不安全,效率高 Set(无序,唯一) HashSet 底层数据结构是哈希表。 哈希表依赖两个方法:hashCode()和equals() 执行顺序: 首先判断hashCode()值是否相同 是:继续执行equals(),看其返回值 是true:说明元素重复,不添加 是false:就直接添加到集合 否:就直接添加到集合 最终: 自动生成hashCode()和equals()即可 LinkedHashSet 底层数据结构由链表和哈希表组成。 由链表保证元素有序。 由哈希表保证元素唯一。 TreeSet 底层数据结构是红黑树。(是一种自平衡的二叉树) 如何保证元素唯一性呢? 根据比较的返回值是否是0来决定 如何保证元素的排序呢? 两种方式 自然排序(元素具备比较性) 让元素所属的类实现Comparable接口 比较器排序(集合具备比较性) 让集合接收一个Comparator的实现类对象 Map(双列集合) A:Map集合的数据结构仅仅针对键有效,与值无关。 B:存储的是键值对形式的元素,键唯一,值可重复。 HashMap

Java中常见数据结构:Java容器 Collection与map -底层如何实现

戏子无情 提交于 2019-12-04 03:53:35
1 :集合 2 Collection(单列集合) 3 List (有序,可重复) 4 ArrayList 5 底层数据结构是数组,查询快,增删慢 6 线程不安全,效率高 7 Vector 8 底层数据结构是数组,查询快,增删慢 9 线程安全,效率低 10 LinkedList 11 底层数据结构是链表,查询慢,增删快 12 线程不安全,效率高 13 Set (无序,唯一) 14 HashSet 15 底层数据结构是哈希表。 16 哈希表依赖两个方法:hashCode()和 equals () 17 执行顺序: 18 首先判断hashCode()值是否相同 19 是:继续执行 equals (),看其返回值 20 是 true :说明元素重复,不添加 21 是 false :就直接添加到集合 22 否:就直接添加到集合 23 最终: 24 自动生成hashCode()和 equals ()即可 25 26 LinkedHashSet 27 底层数据结构由链表和哈希表组成。 28 由链表保证元素有序。 29 由哈希表保证元素唯一。 30 TreeSet 31 底层数据结构是红黑树。(是一种自平衡的二叉树) 32 如何保证元素唯一性呢 ? 33 根据比较的返回值是否是 0 来决定 34 如何保证元素的排序呢 ? 35 两种方式 36 自然排序(元素具备比较性) 37

集合继承体系图的理解

南笙酒味 提交于 2019-12-04 00:21:18
   一、Collection、Collections的区别?    1. java.util. Collection是一个集合的顶级接口 。它提供了对集合对象进行基本操作的通用接口方法。Collection接口在Java类库中有很多具体的实现,其直接继承接口有List与Set。   2. Collections是集合类的一个工具类 ,其中提供了一系列静态方法,用于对集合中元素进行排序、搜索以及线程安全等操作。     1)排序(sort):使用sort方法可以根据元素的自然顺序对指定列表按升序进行排序。列表中的所有元素都必须实现Comparable接口。此列表内的所有元素都必须是使用指定比较器可相互比较的。 1 List<Integer> list = new ArrayList<Integer>(); 2 int array[] = {112, 111, 23, 456, 231 }; 3 for (int i = 0; i < array.length; i++) { 4 list.add(array[i]); 5 } 6 Collections.sort(list); 7 for (int i = 0; i < array.length; i++) { 8 System.out.println(list.get(i)); 9 } 10 结果:23 111 112 231