算法与数据结构

xiaoxiao2021-02-28  117

1,二分查找

def bin_search(data_set, val):     low = 0     high = len(data_set) - 1     while low <= high:         mid = (low+high)//2         if data_set[mid]['id'] == val:             return mid         elif data_set[mid]['id'] < val:             low = mid + 1         else:             high = mid - 1     return                                                                                      ###有序列表查找 def binary_search(dataset, find_num):     if len(dataset) > 1:         mid = int(len(dataset) / 2)         if dataset[mid] == find_num:             #print("Find it")             return dataset[mid]         elif dataset[mid] > find_num:             return binary_search(dataset[0:mid], find_num)         else:             return binary_search(dataset[mid + 1:], find_num)     else:         if dataset[0] == find_num:             #print("Find it")             return dataset[0]         else:             pass                                                                       #####有序字典key查找

2排序

low逼三人组(冒泡,选择,插入)

冒泡排序

def bubble_sort(li):

    for i in range(len(li) - 1):         for j in range(len(li) - i - 1):             if li[j] > li[j+1]:                 li[j], li[j+1] = li[j+1], li[j]                                                     ###冒泡排序

如状态,可以直接结束算法果冒泡排序中执行一趟而没有交换,则列表已经是有序

def bubble_sort_1(li):     for i in range(len(li) - 1):         exchange = False         for j in range(len(li) - i - 1):             if li[j] > li[j+1]:                 li[j], li[j+1] = li[j+1], li[j]                 exchange = True         if not exchange:             break

选择排序

一趟遍历记录最小的数,放到第一个位置; 再一趟遍历记录剩余列表中最小的数,继续放置; 问题是:怎么选出最小的数

def select_sort(li):     for i in range(len(li) - 1):         min_loc = i         for j in range(i+1,len(li)):             if li[j] < li[min_loc]:                 min_loc = j         li[i], li[min_loc] = li[min_loc], li[i]

插入排序

def insert_sort(li):     for i in range(1, len(li)):         tmp = li[i]         j = i - 1         while j >= 0 and li[j] > tmp:             li[j+1]=li[j]             j = j - 1         li[j + 1] = tmp

快速排序

def quick_sort_x(data, left, right):     if left < right:         mid = partition(data, left, right)         quick_sort_x(data, left, mid - 1)         quick_sort_x(data, mid + 1, right)

def partition(data, left, right):     tmp = data[left]     while left < right:         while left < right and data[right] >= tmp:             right -= 1         data[left] = data[right]         while left < right and data[left] <= tmp:             left += 1         data[right] = data[left]     data[left] = tmp     return left

3堆排序

二叉树是度不超过2的树 满二叉树与完全二叉树 (完全)二叉树可以用列表来存储,通过规律可以从父亲找到孩子或从孩子找到父亲

大根堆:一棵完全二叉树,满足任一节点都比其孩子节点大 小根堆:一棵完全二叉树,满足任一节点都比其孩子节点小

1.建立堆 2.得到堆顶元素,为最大元素 3.去掉堆顶,将堆最后一个元素放到堆顶,此时可通过一次调整重新使堆有序。 4.堆顶元素为第二大元素。 5.重复步骤3,直到堆变空。 def sift(data, low, high):     i = low     j = 2 * i + 1     tmp = data[i]     while j <= high: #只要没到子树的最后         if j < high and data[j] < data[j + 1]:             j += 1         if tmp < data[j]:#如果领导不能干             data[i] = data[j] #小领导上位             i = j             j = 2 * i + 1         else:             break     data[i] = tmp

数据结构

转载请注明原文地址: https://www.6miu.com/read-19851.html

最新回复(0)