一、查找
二分查找
二、排序
冒泡排序
def bubbleSort(array):
for i in range(len(array)):
for j in range(len(array) - i - 1):
if array[j] > array[j+1]:
array[j], array[j+1] = array[j+1], array[j]
快排
def quickSort(array):
l, r = 0, len(array) - 1
if l < r:
mid = partition(array, l, r)
quickSort(array[:mid])
quickSort(array[mid+1:])
def partition(array, l, r):
i = l - 1
x = array[r]
for j in range(l, r):
if array[j] >= x:
i += 1
array[i], array[j] = array[j], array[i]
array[i+1], array[r] = array[r], array[i+1]
return i+1
归并排序
def mergeSort(array, l, r):
if l >= r:
return array
mid = (l + r) >> 1
left = mergeSort(array, l, mid)
right = mergeSort(array, mid, right)
return merge(left, right)
def merge(a1, a2):
m, n = len(a1), len(a2)
i = j = 0
a = []
while i < m and j < n:
if a1[i] <= a2[j]:
a.append(a1[i])
i += 1
else:
a.append(a2[j])
j += 1
while i < m:
a.append(a1[i])
i += 1
while j < n:
a.append(a2[j])
j += 1
return a
三、二叉树遍历
无敌简单递归版本
def preOrder(root):
if root:
print(root.val)
self.preOrder(root.left)
self.preOrder(root.right)
def inOrder(root):
if root:
self.inOrder(root.left)
print(root.val)
self.inOrder(root.right)
def postOrder(root):
if root:
self.postOrder(root.left)
self.postOrder(root.right)
print(root.val)
有点难度循环版本
def preOrder(root):
if root == None:
return []
res = []
node = root
stack = []
while stack or node:
while node:
res.append(node.val)
stack.append(node)
node = node.left
if stack:
node = stack.pop()
node = node.right
return res
def inOrder(root):
if root == None:
return []
stack = []
node = root
while stack or node:
while node:
stack.append(node)
node = node.left
if stack:
node = stack.pop()
res.append(node.val)
node = node.right
return res
def postOrder(root):
if root == None:
return res
stack = []
node = root
pre = None
while stack or node:
while node:
stack.append(node)
node = node.left
node = stack[-1]
if node.right != pre:
node = node.right
else:
node = stack.pop()
res.append(node.val)
pre = node
node = None