《算法图解》笔记(2) 选择排序

数组和链表

使用数组意味着在内存中都是相连的(紧靠在一起的)。在数组中添加新元素也可能很麻烦。不过当需要随机读取元素时,数组的效率很高。

而链表中的元素可存储在内存的任何地方。链表的每个元素都存储了下一个元素的地址,从而使一系列随机的内存地址串在一起。因而链表的优势在插入元素方面。

选择排序

问题:假设你的计算机存储了很多乐曲。对于每个乐队,你都记录了其作品被播放的次数。你要将这个列表按播放次数从多到少的顺序排列,从而将你喜欢的乐队排序。该如何做呢?

选择排序代码:

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))
    return newArr

print (selectionSort([5,3,6,2,10]))

小结

  • 计算机内存犹如一大堆抽屉。
  • 需要存储多个元素时,可使用数组或链表。
  • 数组的元素都连在一起
  • 链表的元素是分开的,其中每个元素都存储了下一个元素的地址。
  • 数组读取速度很快。
  • 链表插入删除速度很快。
  • 在同一个数组中,所有元素类型都必须相同(都为int、double等)。

小贴士

python strip()函数 介绍 

声明:s为字符串,rm为要删除的字符序列

  • s.strip(rm) 删除s字符串中开头、结尾处,位于 rm删除序列的字符
  • s.lstrip(rm) 删除s字符串中开头处,位于 rm删除序列的字符
  • s.rstrip(rm) 删除s字符串中结尾处,位于 rm删除序列的字符 
注意:
  1. 当rm为空时,默认删除空白符(包括'\n', '\r',  '\t',  ' ')
  2. 这里的rm删除序列是只要边(开头或结尾)上的字符在删除序列内,就删除掉

字符串的split用法

说明:Python中没有字符类型的说法,只有字符串,这里所说的字符就是只包含一个字符的字符串!!! 

sizeof(参数) ,求的是占用的空间的,例如

  • sizeof("OK"),为3,是因为'O''K''\n',所以为3。
  • sizeof(p);p是指针,所以为4。sizeof(p),这并不是求出p指向的内容,而是看p是指针,大小为4 ,因此得4(指针本身大小是4个字节(32位系统))
指针:用4个字节来存放指针变量。其存放的值就是一个地址。
 
 

猜你喜欢

转载自www.cnblogs.com/wmxnlfd/p/10479186.html