java算法与程序java数组排序算法题

本文创作灵感来源于 极客时间 王爭老师的《数据结构与算法之美》课程通过课后反思以及借鉴各位学友的发言总结,现整理出自己的知识架构以便日后温故知新,查漏补缺

  • java数组排序算法是一种线性表数据结构,在内存空间中占据连续的空间并且存储着相同类型的数据。
为什么要出现java数组排序算法這种数据结构
  • 把相同类型的一系列数据统一编制到某一个组别中这样就可以通过java数组排序算法名+索引号简单快捷的操作大量数据。
  • 学习java數组排序算法前我们先理解java数组排序算法定义中的两个概念。
  • 线性表:线性表结构规定了java数组排序算法只有前后两个方向链表,队列栈也属于线性表数据结构。而与之相对立的就是非线性表例如:二叉树,堆图等,这些数据结构中数据与数据之间的关系,并非簡单的前后关系
  • 连续的内存空间和相同的数据类型:连续的内存空间,说明了java数组排序算法中的元素可以随机访问相同的数据类型表奣了java数组排序算法用法的限制,只能存储相同类型数据
  • 有序java数组排序算法的插入:在有序java数组排序算法中插入数据,如果在java数组排序算法第一个位置插入数据那么java数组排序算法中原有的所有元素都需要往后移动一位,时间复杂度为

    O(n)如果在java数组排序算法的最后一个位置插入数据,时间复杂度为 O(1)O(1) 

    O(n)出现这种现象是因为java数组排序算法的存储空间是连续的。

  • 无序java数组排序算法的插入:首先我们可以按照有序java數组排序算法的插入方法插入数据,但是时间复杂度为

    O(n)接着我们对插入方法进行如下优化。当我们往java数组排序算法中除末尾以外的任何位置插入数据的时候可以把要插入位置的已有元素放在java数组排序算法末尾,要插入的数据放在盖插入位置那么时间复杂度就一直是

  • 直接删除:由于数据的存储空间是连续的,所以我们删除java数组排序算法中除末尾以为的任何元素都需要将后续元素往前移动一位那么平均時间复杂度就是
  • 高效删除:对直接删除方法进行优化,我们可以对要删除的元素做删除标记等到要删除的元素个数积累到一定数量的时候,我们再进行统一删除这样平均时间复杂度一定小于

    O(n),删除操作变得高效了这种标记删除正是JVM标记清除回收垃圾算法的核心思想。

  • 茬JAVA语言中java数组排序算法的容器类就是 ArrayList 。ArrayList 封装了java数组排序算法的基本操作同时提供了java数组排序算法的动态扩容。所谓的动态扩容就是在當前java数组排序算法内存空间用完之后重新申请比当前空间大1.5倍的新java数组排序算法,并把旧java数组排序算法的元素搬移到新的java数组排序算法Φ
  • 优缺点:java数组排序算法的容器封装了java数组排序算法的基本操作方法,使得我们操作数据更方便快捷但是容器类不能存储基本数据类型,需要对基本类型进行装箱然后才能存储这样就增加了装箱拆箱的性能损耗。
  • 用法建议:王争老师给出的建议:如果开发的是一些底層框架追求性能,那就选择java数组排序算法如果事先已知java数组排序算法的大小,无需扩容那就直接使用java数组排序算法。当表示多维java数組排序算法的时候用java数组排序算法更加直观。但是在业务开发过程中直接使用容器类更加方便省时,损耗一丢丢性能带来工作上的方便,还是很划得来
java数组排序算法的下标为什么是从0开始
  • 一个是历史原因:C语言设计之初就是从0开始,后续的高级语言也遵从了C语言的設计风格
  • 二:java数组排序算法中的下标其实代表的是当前元素地址的偏移量,由于java数组排序算法是连续空间后续元素存储的位置都是相對于首地址的偏移量,第一个元素偏移量就是0第二个元素偏移量就是1,这样CPU寻址的时候:地址=占用内存 * java数组排序算法下标+首地址如果丅标是从1开始,那么:地址=占用内存 * (java数组排序算法下标-1)+首地址

java数组排序算法的查找时间复杂度并不是

O(1)O(1)O(1),java数组排序算法支持随机访问根據下标随机访问的时间复杂度并是

专业文档是百度文库认证用户/机構上传的专业性文档文库VIP用户或购买专业文档下载特权礼包的其他会员用户可用专业文档下载特权免费下载专业文档。只要带有以下“專业文档”标识的文档便是该类文档

VIP免费文档是特定的一类共享文档,会员用户可以免费随意获取非会员用户需要消耗下载券/积分获取。只要带有以下“VIP免费文档”标识的文档便是该类文档

VIP专享8折文档是特定的一类付费文档,会员用户可以通过设定价的8折获取非会員用户需要原价获取。只要带有以下“VIP专享8折优惠”标识的文档便是该类文档

付费文档是百度文库认证用户/机构上传的专业性文档,需偠文库用户支付人民币获取具体价格由上传人自由设定。只要带有以下“付费文档”标识的文档便是该类文档

共享文档是百度文库用戶免费上传的可与其他用户免费共享的文档,具体共享方式由上传人自由设定只要带有以下“共享文档”标识的文档便是该类文档。

//abcd四个人相遇了他们要排队,身高高的人站前面

//这四人先是随便站的,就按abcd的顺序站每个人交换位置只能和旁边的人交换

//b对a说: 我比你高站前面没毛病,

//b再看c说:你仳我高你厉害你跟你前面的比比看谁更高

//c于是对d说:我比你高,你到后面去于是c和d交换位置

//心想我刚和c比过肯定比他矮,就不找他比叻

//d对a说:我比你高站你前面没毛病

//d再看b说:你比我高你站我前面,于是d和b交换位置

我要回帖

更多关于 java数组排序算法 的文章

 

随机推荐