《算法图解》学习笔记—第2章 选择排序

2.1内存的工作原理

在这里插入图片描述
fe0ffeeb是一个内存单元的地址。
需要将数据存储到内存时,你请求计算机提供存储空间,计算机给你一个存储地址。需要存储多项数据时,有两种基本方式——数组和链表。

2.2 数组和链表

有时候,需要在内存中存储一系列元素。假设你要编写一个管理待办事项的应用程序,为此需要将这些待办事项存储在内存中。
在这里插入图片描述
使用数组意味着所有待办事项在内存中都是相连的(紧靠在一起的)。再添加代办事项时,需要请求计算机重新分配一块可容纳4个待办事项的内存,再将所有待办事项都移到那里。

在这里插入图片描述
链表中的元素可存储在内存的任何地方。链表的每个元素都存储了下一个元素的地址,从而使一系列随机的内存地址串在一起。在链表中添加元素很容易:只需将其放入内存,并将其地址存储到前一个元素中。

在这里插入图片描述
需要随机地读取元素时,数组的效率很高,因为可迅速找到数组的任何元素。在链表中,元素并非靠在一起的,你无法迅速计算出第五个元素的内存地址,而必须先访问第一个元素以获取第二个元素的地址,再访问第二个元素以获取第三个元素的地址,以此类推,直到访问第五个元素。

  • 元素的位置称为索引。因此,不说“元素20的位置为1”,而说“元素20位于索引1处”

中间插入

需要在中间插入元素时,使用链表,插入元素很简单,只需修改它前面的那个元素指向的地址。
在这里插入图片描述
而使用数组时,则必须将后面的元素都向后移。如果没有足够的空间,可能还得将整个数组复制到其他地方!因此,当需要在中间插入元素时,链表是更好的选择。
在这里插入图片描述

删除

如果你要删除元素呢?链表也是更好的选择,因为只需修改前一个元素指向的地址即可。而使用数组时,删除元素后,必须将后面的元素都向前移。

运行时间

下面列出了常见的数组和链表操作的运行时间。
在这里插入图片描述

2.3 选择排序

将数组元素按从小到大的顺序排列。先编写一个用于找出数组中最小元素的函数。

def findSmallest(arr):
    smallest = arr[0] #存储最小的值
    smallest_index = 0 #存储最小元素的索引
    for i in range(1,len(arr)):
        if arr[i] < smallest
           smallest = arr[i]
           smallest_index = i
    return smallest_index

现在可以使用这个函数来编写选择排序算法了。

def selectionSort(arr): #对数组进行排序
    newArr = []
    for i in range (len(arr)):
        smallest = findSmallest(arr)
        newArr.append(arr.pop(smallest)) #pop 移除列表中一个元素并返回该元素的值
    return newArr

选择排序的时间为O( n 2 n^2 n2)。第一次需要检查n个元素,但随后检查的元素数依次为 n − 1 n - 1 n1, n – 2 n – 2 n2, …, 1。平均每次检查的元素数为1/2 × n n n,因此运行时间为O( n × 1 / 2 × n n × 1/2 × n n×1/2×n)。但大O表示法省略诸如1/2这样的常数,因此简单地写作O( n × n n × n n×n)或O( n 2 n^2 n2)。
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在人工智能研究中,状态空间法是一种基于解空间的问题表示和求解方法。该方法通过在可能的解空间内寻找一个解来求解问题。状态空间法以状态和算符为基础来表示和求解问题。在传统人工智能问题中,复杂的求解技术都离不开表示与搜索这两个方面的内容,其中状态空间表示是其中的一个重要概念。状态空间法采用试探搜索方法,在某个可能的解空间内寻找一个解来求解问题。图解人工智能第二章学习笔记中可能会涉及到状态空间法的概念和问题状态描述。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [人工智能及其应用——第二章学习笔记(上)](https://blog.csdn.net/JallinRicher/article/details/122752897)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* [《人工智能及其应用》课程笔记(二)第2章 知识表示方法](https://blog.csdn.net/qq_46485137/article/details/122101559)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值