专项练习--排序 数组(3)

在待排序记录已经有序的情况下,执行时间最省的是堆排序。几乎有序时,快排的时间复杂度退化到O(n*n)。无序时,快排才比较省时间O(n*logn)

QUDIAN

最小字母为A 最大字母为U,若升序排序完成顺序应该是ADINQU

两趟排序导致QU是有序的,其他四个字母还无序,选择排序则QU应该在后面,冒泡和堆排序两趟也会使元素到达他最终位置,所以排除

插入排序,冒泡排序和快速排序的排序趟数与序列的初始状态有关

堆排序和选择排序的排序次数与初始状态无关,即最好情况和最坏情况都一

只有有向无环图才可以进行拓扑排序。

其他的排序时间复杂度在O(n^2),归并排序无论怎样时间复杂度还是O(n log n)。

应该是归并排序,比如把1,2,3,4排成4,3,2,1

第一次排序:2,1,4,3

第二次排序:4,3,2,1

就像一颗树一样。

选择排序的思想是:第i趟排序,找到L[i...n]中最小的元素与L(i)交换位置,这样保证每一趟排序确定一个元素的最终位置。

第一趟:1,15,12,18,2,35,30,11
第二趟:1,2,12,18,15,35,30,11
第三趟:1,2,11,18,15,35,30,12
第四趟:1,2,11,12,15,35,30,18
第五趟:1,2,11,12,15,18,35,30
第六趟:1,2,11,12,15,18,30,35

 

排除法

A 按两路归并的原理判断,A错。

B 快排一趟排序,可确认一个元素的位置,该元素即是锚点,左小右大或左大右小,此题 Q 左小右大,B对。

CD 按希尔的原理判断,CD错。

EF 这两种排序一趟排序结束后,必定会有一个元素在最终位置,即第一个位置是组中最大或最小元素,EF错。

红黑树和avl树都属于自平衡二叉树;

两者查找、插入、删除的时间复杂度相同;

包含n个内部结点的红黑树的高度是o(logn);

TreeMap是一个红黑树的实现,能保证插入的值保证排序

关于红黑树和AVL树,来自网络:

1 好处 及 用途

        红黑树 并不追求“完全平衡 ”——它只要求部分地达到平衡要求,降低了对旋转的要求,从而提高了性能。

红黑树能够以 O(log2  n)  的时间复杂度进行搜索、插入、删除操作。此外,由于它的设计,任何不平衡都会在三次旋转之内解决。当然,还有一些更好的,但实现起来更复杂的数据结构 能够做到一步旋转之内达到平衡,但红黑树能够给我们一个比较“便宜”的解决方案。红黑树的算法时间复杂度和AVL相同,但统计性能比AVL树更高。

 

        当然,红黑树并不适应所有应用树的领域。如果数据基本上是静态的,那么让他们待在他们能够插入,并且不影响平衡的地方会具有更好的性能。如果数据完全是静态的,例如,做一个哈希表,性能可能会更好一些。

 

在实际的系统中,例如,需要使用动态规则的防火墙系统,使用红黑树而不是散列表被实践证明具有更好的伸缩性。

典型的用途是实现关联数组

 

 

AVL树是最先发明的自平衡二叉查 找树。在AVL树中任何节点的两个儿子子树的高度最大差别为一,所以它也被称为高度平衡树。查找、插入和删除在平均和最坏情况下都是O(log n)。增加和删除可能需要通过一次或多次树旋转来重新平衡这个树。AVL树得名于它的发明者 G.M. Adelson-Velsky 和 E.M. Landis,他们在 1962 年的论文 "An algorithm for the organization of information" 中发表了它。

 

引入二叉树的目的是为了提高二叉树的搜索的效率,减少树的平均搜索长度.为此,就必须每向二叉树插入一个结点时调整树的结构,使得二叉树搜索保持平衡,从而可能降低树的高度,减少的平均树的搜索长度. 

AVL树的定义: 
一棵AVL树满足以下的条件: 
1>它的左子树和右子树都是AVL树 
2>左子树和右子树的高度差不能超过1 
从条件1可能看出是个递归定义,如GNU一样. 

性质: 
1>一棵n个结点的AVL树的其高度保持在0(log2(n)),不会超过3/2log2(n+1) 
2>一棵n个结点的AVL树的平均搜索长度保持在0(log2(n)). 
3>一棵n个结点的AVL树删除一个结点做平衡化旋转所需要的时间为0(log2(n)). 

从1这点来看 红黑树是牺牲了严格的高度平衡的优越条件 为 代价红黑树能够以O(log2 n)的时间复杂度进行搜索、插入、删除操作。此外,由于它的设计,任何不平衡都会在三次旋转之内解决。当然,还有一些更好的,但实现起来更复杂的数据结构 能够做到一步旋转之内达到平衡,但红黑树能够给我们一个比较“便宜”的解决方案。红黑树的算法时间复杂度和AVL相同,但统计性能比AVL树更高.

ArrayList是实现了基于动态数组的数据结构,LinkedList基于链表的数据结构。 

A、不管在是否拍好序的情况下,数据的查找复杂度应该比链表快,以为数据可以直接定位,链表则要遍历 

B、对于新增和删除操作add和remove,LinedList比较占优势,因为ArrayList要移动数据。

 C、对于随机访问get和set,ArrayList觉得优于LinkedList,因为LinkedList要移动指针。所有array的效率高 

D、数组和链表的数据类型都是相同的

数据存储类型就是数据的类型,如整形,字符型等,所以数组和链表是相同的,数据访问效率不同,数组可以随机访问,而链表不可以,插入删除效率也不相同

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值