《算法图解》第二章——选择排序

本文深入探讨了计算机内存原理,详细讲解了数组与链表这两种基本数据结构的特点及适用场景,并通过实例演示了选择排序算法的实现过程。

今天1024,我来码点字。特此感谢深度眸博主的资料与博客技术分享

资料链接:http://cuijiahua.com/resource.html

第二章讲了几个知识点:1.介绍了内存原理;2.正式引入了数组和链表的概念;3.选择排序的算法及其代码实现

目录

计算机内存原理

数组与链表

选择排序

书中小结


  • 计算机内存原理

计算机就像是很多抽屉的集合体,每个抽屉都有地址。你有一个变量,计算机就给你开辟一个地址

 

  • 数组与链表

需要将数据存储到内存时,你请求计算机提供存储空间,计算机给你一个存储地址;需要存
储多项数据时两种基本的数据结构:数组与链表
 

数组:内存地址连续,查看全部元素比较简单,但是添加和删除元素比较麻烦。

链表:链表中的元素可以储存在内存的任何地方,因为链表中的每一个元素都存储了下一个元素的地址,添加和删除元素比较方便,但是查看全部元素比较麻烦。

使用情况:数组运用较多,它能够支持顺序访问(从第一个元素到最后一个元素)和随机访问;然而链表只能支持顺序访问(他的元素地址是一环接着一环的)。ps:真skr相爱相杀互补的好基友

链表与数组运行时间
 数组链表
读取O(1)O(n)
插入O(n)O(1)
删除O(n)O(1)

O(n):线性时间   O(1):常量时间

  • 选择排序

算法思想如下:

  1. 从待排序序列中,找到关键字最小的元素
  2. 如果最小元素不是待排序序列的第一个元素,将其和第一个元素互换;
  3. 从余下的 N - 1 个元素中,找出关键字最小的元素,重复(1)、(2)步,直到排序结束。
    时间复杂度:O(n2)

没有代码的算法都是耍流氓,code如下:

#!/usr/bin/env python3 
# -*- coding:utf-8 -*-
# 选择排序:每一次都遍历全部找出最小(大)值,第一次N个中找,第二次N-1个中找,.....
def SelectionSort(array):
    for i in range(len(array)):
        min_index = i #每次循环,默认第一个为最小值,获取其索引值
        for j in range(i+1, len(array)):
            if array[min_index] > array[j]:
                min_index = j
        temp = array[i]
        array[i] = array[min_index]
        array[min_index] = temp
    return array
array = [5,2,3,1]
print(SelectionSort(array))#答案:[1,2,3,5]

PS:空间复杂度:需要占用一个临时空间,用于保存最小值索引

  • 书中小结

  1. 计算机内存犹如一堆大抽屉。

  2. 需要存储多个元素时,可使用数组或者链表。

  3. 数组的元素都在一起。

  4. 链表的元素是分开的,其中每一个元素都存储了下一个元素的地址。

  5. 数组的读取速度很快。

  6. 链表的插入和删除速度很快。

  7. 在同一个数组中,所有元素的类型必须要相同(都为int,double等)。

如有错误欢迎指正

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值