2 选择排序

常见的 数组 和 链表操作的运行时间

:::warning O(n) = 线性时间
O(1) = 常量时间 ::: | | 数组 | 链表 | | —- | —- | —- | | 读取 | O(1) | O(n) | | 插入 | O(n) | O(1) | | 删除 | O(n) | O(1) |

算法图解 - 图1

算法 — 快速排序

  1. // 将数组元素按从小到大的顺序排列。先编写一个用于找出数组中最小元素的函数。
  2. def findSmallest(arr):
  3. smallest = arr[0] // 存储最小的值
  4. smallest_index = 0 // 存储最小元素的索引
  5. for i in range(1, len(arr)):
  6. if arr[i] < smallest:
  7. smallest = arr[i]
  8. smallest_index = i
  9. return smallest_index
  10. // 使用这个函数来编写选择排序算法
  11. def selectionSort(arr): // 对数组进行排序
  12. newArr = []
  13. for i in range(len(arr)):
  14. smallest = findSmallest(arr) // 找出数组中最小的元素
  15. newArr.append(arr.pop(smallest)) // 将其加入到新数组中
  16. return newArr
  17. print selectionSort([5, 3, 6, 2, 10])

1 算法简介

算法图解 - 图2

算法 — 二分查找

  1. 函数binary_search接受一个有序数组和一个元素。如果指定的元素包含在数组中,这个
  2. 函数将返回其位置。你将跟踪要在其中查找的数组部分——开始时为整个数组。
  3. def binary_search(list,item):
  4. //low-high是要查找的范围
  5. //lowhigh用于跟踪要在其中查找的列表部分
  6. low=0
  7. high=len(list)-1
  8. //只要范围没有缩小到只包含一个元素,就检查中间的元素
  9. while low <= high:
  10. mid = (low+high)/2
  11. guess= list[mid]
  12. //找到了元素
  13. if guess == item:
  14. return mid
  15. //猜的数字大了
  16. if guess > item:
  17. high =mid -1
  18. //猜的数字小了
  19. else:
  20. low = mid +1
  21. //没有指定的元素
  22. return None
  23. my_list = [1, 3, 5, 7, 9]
  24. //索引从0开始,第二个位置的索引为1
  25. print binary_search(my_list, 3) # => 1
  26. //在Python中,None表示空,意味着没有找到指定的元素
  27. print binary_search(my_list, -1) # => None