zoukankan      html  css  js  c++  java
  • 选择排序

    一、内存的工作原理

      假如你去游乐场游玩,需要将东西寄存。寄存处有一个柜子,柜子有很多抽屉。

      每个抽屉可以放一件东西,你有两件,所以说你需要两个抽屉,然后你将这两样东西存到抽屉里,这样你就可以轻松的去游玩了。

      其实,这大致就是内存工作的原理。计算机的内存是一个抽屉的集合,里面包含了很多的抽屉,每个抽屉都有一个地址。

      当你需要将数据存储到内存的时,你请求计算机提供存储空间,计算机给你提供一个存储地址。当你需要存储多个数据时,有两种借本的方式———数组与链表。

      但他们并非都适用于多有情景,因此知道他们的差别很重要。

    二、数组与链表

      数组:

        有序的元素序列,在同一数组中,所有元素的类型都必须相同;

        其在内存中存储是连续的

        因为数组每个元素对应一个下标值,所以数组读取元素速度快

        数组在新增修改删除元素时,效率很慢,若插入的元素在中间,则需要将后面的元素全部后移,数组在修改插入元素时是需要移动的;

        数组是随机访问;  

      链表:

        每个元素都存储了下一个元素的地址,从而使一系列随机的内存地址串连在一起;

        元素可存储在内存任何地方

        链表新增修改删除元素时,效率很快,只需将其放入(修改)内存,并将其地址存储到前一个元素中,链表无需移动元素;

        需要一次读取所有元素时,链表的效率很多

        如果要读取链表的最后一个元素,只能从第一个元素开始读,因为得知道下一个元素的地址,所以列表的读取效率非常慢的;

        链表是顺序访问

    三、选择排序

      选择排序是一种灵巧的算法,但其速度不是很快,其运行时间为O(n*n);

      随着排序的进行,每次需要检查的元素数都在减少,最后一次需要检索的元素都只有一个。既然如此,运行时间怎么还是O(n*n)呢,这与大O表示法中的常数有关。

      你说得没错,并非每次都需要检查n次,第一次需要检查n个元素,第二次需要检查n-1,第三次是n-2,...... 2和1。所以平均每次检查的元素为1/2n,因此运行时间应该为n*1/2n,但是大O表示法省略了诸如1/2这样的常量,所以简单写为O(n*n)。

  • 相关阅读:
    (转载)安装Android时Could not find D:\Android\a...sdkwindows\tools\adb.exe
    (转载)Exception in thread "main" java.lang.NoClassDefFoundError错误信息
    (转载)java函数参数类型后添加三点的用法
    (转载)一个fork的面试题
    javascript event事件再次封装了,兼容大多数浏览器
    SINA多功能弹窗已经摘出来
    Observer Design Pattern Using JavaScript
    CSS Hacks for IE,IE 也可以很完美
    N久前写的一个JSONP请求方法
    JS模拟滚动条雏形(待进一步规整)
  • 原文地址:https://www.cnblogs.com/zsvslx/p/10564274.html
Copyright © 2011-2022 走看看