Java中的各种数据结构和算法的比较

线性表相关:
线性表是一种逻辑结构,相同数据类型的N个数据元素的有限序列,除了第一个元素外,每个元素有且仅有一个直接前驱,除了最后一个元素外,每个元素有且仅有一个直接后继。
线性表的特点:
1.元素个数有限
2.逻辑上元素有先后次序
3.数据类型相同
4.仅讨论元素间的逻辑关系
线性表的层次关系:
在这里插入图片描述

栈和队列是两种操作受限的线性表:栈的插入和删除只能在表尾端进行,即栈顶;队列只能在表尾插入元素,在表头删除元素,都可以通过顺序结构和链式结构实现,插入与删除的时间复杂度都是O(1),在空间复杂度上两者也一样。

算法复杂度的知识
算法复杂度是对一个算法进行计算的时候,存储数据需要占用一定的空间和执行计算需要耗费一定的时间的一种评价。
平时说的代码的时间复杂度指的是渐进时间复杂度:nn>n!>cn>n^c>log©n>c

稳定性
稳定性指相同元素的相对位置不会改变。其中,稳定的排序算法有冒泡排序,插入排序,归并排序,基 数排序。
适用场景: 1. 当排序个数小于50个时,适合用直接插入排序和简单选择排序,如果排序的元素太多,就不适合用 直接插入排序,因为直接插入排序需要移动元素的次数比较多,会消耗一定的程序性能。 2. 当数组内的元素基本有序的情况下,适合用直接插入排序和冒泡排序,它们排序的性能比较高。

一。稳定算法
有些时候,排序要考虑数据项拥有相同关键字的情况,在这种情况下,只需要算法对需要排序的 数据进行排序,让不需要排序的数据保持原来的顺序,某些算法满足这样的要求,它们被称为稳 定的算法。冒泡排序,选择排序,插入排序都是稳定算法。

二。各种数据结构的优缺点比较
1.数组: 优点:插入快,如果知道了下标可以非常快速的存取数据 缺点:查找,删除慢,大小固定
2.有序数组 优点:比无序数组查找快 缺点:删除,插入慢,大小固定
3.栈 优点:提供后进先出方式的存取 缺点:存取其他项很慢
4.队列 优点:提供先进先出方式的存取 缺点:存取其他项很慢
5.链表 优点:插入快,删除快 缺点:查找慢
6.二叉树 优点:如果树保持平衡,查找,插入,删除都快 缺点:删除算法复杂
7.红黑树 优点:查找,插入,删除都快,树总是平衡的 缺点:算法复杂
8.哈希表 优点:如果关键字已知则存取,插入极快 缺点:删除慢,如果不知道关键字则存取很慢,对存储空间使用不充分
9.堆 优点:插入,删除快,对最大数据项的存取很快 缺点:对其他数据项存取慢
10.图 优点:对现实世界建模 缺点:有些算法慢且复杂

三。比较
冒泡排序算法虽然最简单,但运行起来非常慢,选择排序改进了冒泡排序,将必要的交换次数由O(NN) 减少到O(N),但是比较次数扔保持为O(NN)。选择排序为大记录量的排序提出了一个非常重要的改进, 因为这些大量的记录需要在内存中移动,这就使交换的时间和比较的时间相比起来,交换的时间更为重
要。在java中只是改变了引用位置,而实际对象的位置并没有发生改变。 选择排序和冒泡排序执行了相同次数的比较:N*(N‐1)/2。N值很大时,比较的次数是主要的,所以选择排 序和冒泡排序一样运行了O(NN)时间,但是选择排序更快,因为它进行的交换少的多。当N值较小时,如 果交换的时间级比比较的时间级大的多时,选择排序实际上是很快的。 在大多数情况下,虽然插入排序算法仍然需要O(NN)的时间,但是它要比冒泡排序块一倍,比选择排序 还快一点,它经常被用在较复杂的排序算法的最后阶段,如快速排序。 插入排序比较和复制的次数为N*(N‐1)/4,复制的次数大致等于比较的次数。然而,一次复制与一次交换 的时间耗费不同,相对于随机数据插入排序比冒泡排序块一倍,比选择排序还快一点,对于已经有序或基本有序的数据来说,插入排序要好的多,而对于逆序排列的数据,每次比较和移动都会执行,所以插入排序不比冒泡排序快。
排序包括比较数组中的数据项的关键字和移动相应的数据项,实际上是数据项的引用。 如果是对对象进行排序,可以使用String类的compareTo()方法,compareTo()方法是根据两个String的字典 顺序(字母序)返回给调用者不同的值。

四。几种简单排序的适用场景
从速度方面比较:
一般情况下,几乎不太使用冒泡排序,然而数据量很小的时候可以使用它。
选择排序虽然把交换次数降到了最低,但比较次数仍然很大,当数据量很小时,并且交换数据相对于比较数据更加耗时时,可以使用选择排序。
在大多数情况下,当数据量比较小或基本有序时,插入排序是三种简单排序算法中最好的选择。对于更大数据量的排序来说,快速排序通常是最快的方法。
从内存空间方面比较:
除了初始的数组外,几乎不需要其他的内存空间,所有排序算法都需要一个额外的变量来暂时存储交换时的数据项。

上一篇:java中各种算法和数据结构的使用场景
下一篇:java中的排序算法——堆排序

你可能感兴趣的:(java)