二分查找:
def binary_search(list, item):
low = 0
high = len(list)
while low <= high:
mid = int((low + high) / 2 + 0.5) # 为了实现四舍五入加上一个0.5
guess = list[mid]
if guess == item:
return mid
if guess > item:
high = mid - 1
else:
low = mid - 1
return None大O表示法:
大O表示法指出了算法有多快。
大O表示法指出可最糟情况下的运行时间。
5种大O运行时间(最常见的)
O(logn) 对数时间(二分查找)
O(n) 线性时间(简单查找)
O(n*logn) (快速排序)速度较快
O(n2) (选择排序)速度较快
O(n!) 旅行商问题的解决方法 非常慢的算法
数组和链表:
数组读取速度为常量时间,插入速度为线性时间。
链表读取速度为线性时间,插入速度为常量时间。
数组适合读取操作多,插入操作少的数据。
链表适合插入操作多,读取操作少的数据。
选择排序:(时间复杂度为O(n2))
def findSmallest(arr): # 用于查找出数组中最小的元素,返回最小元素的索引。
smallest = arr[0]
smallest_index = 0
for i in range(1, len(arr)):
if smallest > arr[i]:
smallest = arr[i]
smallest_index = i
return smallest_index
def selectSort(arr):
newArr = []
while arr:
smallest = findSmallest(arr)
newArr.append(arr.pop(smallest))
return newArr递归:
递归最重要的就是要确定基线条件和递归条件。
递归的可读性要比循环要好,但是效率不如循环高。
快速排序:
def quickSort(array):
if len(array) < 2:
return array
else:
pivot = array[0]
less = [i for i in array[1:] if i <= pivot]
greater = [i for i in array[1:] if i > pivot]
return quickSort(less) + [pivot] + quickSort(greater)