【python面试】数据结构和算法

1.常见的排序算法?

a.冒泡排序算法

def bubble_sort(alist):
    for i in range(len(alist)-1,0,-1):
        for j in range(i):
            if alist[j]>alist[j+1]:
                alist[j],alist[j+1]=alist[j+1],alsit[j]
    return alist
复制代码

b.快速排序bash

def quick_sort(alist):
    if len(alist) >=2:
        mid = alist[len(alist)//2]
        left,right = [],[]
        alist.remove(mid)
        for num in alist:
            if mid > num:
                left.append(num)
            else:
                right.append(num)
        return quick_sort(left)+[mid]+quick_sort(right)
    else:
        return alist
        
复制代码

c.选择排序app

def selection_sort(alist):
    for i in range(len(alist)-1):
        min_index = i
        for j in range(i+1,len(alist)):
            if alist[min_index] > alist[j]:
                min_index = j
        if min_index != i:
            alist[min_index],alist[i] = alist[i],alist[min_index]
    return alist
复制代码

d.插入排序post

def insert_sort(alist):
    for i in range(1,len(alist)):
        for j in range(i,0,-1):
            alist[j],alist[j-1]=alist[j-1],alist[j]
    return alist
复制代码

排序算法讲解:juejin.im/post/5c19a1…ui

2.二分查找

def binary_search(alist,num):
    if len(alist) > 1:
        mid = len(alist)//2
        if alist[mid] == num:
            return True
        elif alist[mid] > num:
            return binary_search(alist[:mid],num)
        else:
            return binary_search(alist[mid+1:],num)
    else:
        return False

复制代码

3.队列和栈

a.队列的实现spa

class Queue(object):
    '''队列'''
    def __init__(self):
        self.items = []

    def is_empty(self):
        return self.items == []

    def push(self,item):
        self.items.insert(0,item)

    def pop(self):
        return self.items.pop()

    def size(self):
        return len(self.items)

    def clear(self):
        '''清空队列'''
        del self.items
复制代码

b.栈的实现code

class Stack(object):
    '''栈'''
    def __init__(self):
        self.items = []

    def is_empty(self):
        return self.items == []

    def push(self,item):
        self.items.append(item)

    def pop(self):
        return self.items.pop()

    def size(self):
        return len(self.items)

    def clear(self):
        '''状况栈'''
        del self.items

复制代码

c.两个队列实现一个栈排序

队列a为进栈队列,若是队列a中只有一个元素直接返回,队列a中有多个元素,循环遍历,将其余元素放到队列b中,直到队列a中只有一个元素,返回,交换队列a,b,以便下次获取队列

class TwoQueueToStack(object):
    '''两个队列实现一个栈'''
    def __init__(self):
        self.queue_a = Queue()
        self.queue_b = Queue()

    def push(self,item):
        self.queue_a.put(item)

    def pop(self):
        while self.queue_a.qsize() > 1:
            self.queue_b.put(self.queue_a.get())
        if self.queue_a.qsize() == 1:
            res = self.queue_a.get()
            self.queue_a,self.queue_b = self.queue_b,self.queue_a
            return res

复制代码

d.一个队列实现一个栈rem

# 一个队列实现一个栈
class OneQueueToStack(object):
    def __init__(self):
        self.queue = Queue()

    def push(self,item):
        self.queue.put(item)

    def pop(self):
        count = self.queue.qsize()
        if count == 0:
            return False
        while count > 1:
            x = self.queue.get()
            self.queue.put(x)
            count -= 1
        return self.queue.get()
复制代码
相关文章
相关标签/搜索