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. 在同一数组中,所有元素的类型都必须相同。
  • 相关阅读:
    Java中Filter、Servlet、Listener的学习 (转)
    Servlet 获取商品信息作业
    Servlet 注册与提交作业
    jsp servlet的区别和联系(转)
    用户注册验证留言程序
    作业1
    简单新闻发布系统
    webform 增速删改查 方法
    存取数据库图片
    打印 保存
  • 原文地址:https://www.cnblogs.com/prelude1214/p/13584000.html
Copyright © 2011-2022 走看看