选择排序

一、内存的工作原理

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

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

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

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

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

二、数组与链表

  数组:

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

    其在内存中存储是连续的

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

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

    数组是随机访问;  

  链表:

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

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

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

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

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

    链表是顺序访问

三、选择排序

  选择排序是一种灵巧的算法,但其速度不是很快,其运行时间为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)。

原文地址:https://www.cnblogs.com/zsvslx/p/10564274.html