zoukankan      html  css  js  c++  java
  • 《图解算法》读书笔记(二) 选择排序

    章节内容

    • 学习两种最基本的数据结构:数组和链表
    • 学习一种排序算法:选择排序

    内存的工作原理

    在学习数组和链表之前我们需要先了解计算机内存的工作原理,这有助于我们区分这两种数据结构的本质区别,也能更深刻的体会它们的优劣。
    计算机内存的工作原理就像是我们用于寄存东西的抽屉的集合,每个抽屉都有自己的地址。

    数组与链表

    数组在计算机内存中都是相连的,也就是数组每个元素的地址是连续的。
    链表不同于数组,链表中的元素可存储在内存中的任何地方。链表的每个元素都存储了下一个元素的地址,从而使一列表随机的内存地址串在一起。
    链表的优势:

    • 插入元素
    • 删除元素
      数组的优势:
    • 支持随机的读取元素

    选择排序

    算法思路:

    1. 遍历位置0到N的元素,找出最大/最小的元素
    2. 将找到的最大或最小元素与位置0的元素互换
    3. 遍历位置1到N的元素,重复第1和2的步骤,直至最后一个元素
      算法操作次数=n+(n-1)+(n-2)+.....1=n*n/2
      所以时间复杂度为O(n^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])
    

    小结

    1. 计算机内存犹如一大堆抽屉
    2. 需要存储多个元素时,可使用数组或链表
    3. 数组的元素都在一起
    4. 链表的元素是分开的,其中每个元素都存储了下一个元素的地址
    5. 数组的读取速度很快
    6. 链表的插入和删除速度很快
    7. 在同一数组中,所有元素的类型都必须相同。
  • 相关阅读:
    windows mobile licence
    通过acme.sh生成泛域名证书
    枚举值为何为1、2、4、8、16....
    script 解决 跨域访问
    强大的json字符串对象,转化为object对象
    使用maven jetty调试web程序
    web上实现起点到终点的抛物线轨迹运动——补充
    实现2个有序数组的排序
    maven axis2简单部署webservice
    使用javamail发送邮件
  • 原文地址:https://www.cnblogs.com/prelude1214/p/13584000.html
Copyright © 2011-2022 走看看