参考:https://blog.csdn.net/u012505432/article/details/52071537
一、查找
1、二分法查找
# 实现一个二分查找
# 输入:一个顺序list(必须为有序数列),要查找的值
# 输出: 待查找的元素的位置
def binarySearch(alist, item):
first = 0
last = len(alist) - 1
while first <= last:
mid = (first + last)//2
print(mid)
if alist[mid] > item:
last = mid - 1
elif alist[mid] < item:
first = mid + 1
else:
#从第一个开始
return mid+1
return -1
test = [0, 1, 2, 8, 13, 17, 19, 32, 42]
print(binarySearch(test, 3))
递归:
def bin_search_rec(data_set, value, low, high):
if low < high:
mid = (low + high) // 2
if data_set[mid] == value:
return mid+1
elif data_set[mid] > value:
return bin_search_rec(data_set, value, low, mid - 1)
else:
return bin_search_rec(data_set, value, mid + 1, high)
else:
return None
二、排序
1、冒泡排序法
原理就是,列表相邻的两个数,如果前边的比后边的小,那么交换顺序,经过一次排序后,最大的数就到了列表最前面
class Solution:
def bubbleSort(nums):
# 这个循环负责设置冒泡排序进行的次数
for i in range(len(nums)-1):
# j为列表下标
for j in range(len(nums)-i-1):
if nums[j] > nums[j+1]:
nums[j], nums[j+1] = nums[j+1], nums[j]
return nums
时间复杂度是O(n2)
见:https://www.cnblogs.com/Apy-0816/p/11100265.html
存在一个最好情况就是列表本来就是排好序的,所以可以加一个优化,加一个标志位,如果没有出现交换顺序的情况,那就直接return
高级冒泡排序(鸡尾酒排序/搅拌排序)
def bubble_sort(origin_items, comp=lambda x, y: x > y):
"""高质量冒泡排序(搅拌排序)"""