python3写排序,查找以及链表常考题

本文详细介绍了Python3中三种常见的排序算法:插入排序、冒泡排序和快速排序,并探讨了二分查找的递归与非递归实现。此外,还深入讲解了Python3如何实现链表及其基本操作。
摘要由CSDN通过智能技术生成

一:python3实现常考的排序算法:插入排序, 冒泡排序, 快速排序

def insert_sort(lists):
    length = len(lists)
    for i in range(1, length):
        key = lists[i]
        j = i-1
        while j >= 0:
            if lists[j] > key:
                lists[j + 1] = lists[j]
                lists[j] = key
            j -= 1
    return lists


def bubble_sort(lists):
    length = len(lists)
    for i in range(0, length):
        for j in range(i+1, length):
            if lists[j] < lists[i]:
                lists[j], lists[i] = lists[i], lists[j]
    return lists


def quick_sort(lists, left, right):
    if left >= right:
        return lists
    key = lists[left]
    low = left
    high = right
    while left < right:
        while left < right and lists[right] >= key:
            right -= 1
        lists[left] = lists[right]
        while left < right and lists[left] <= key:
            left += 1
        lists[right] = lists[left]
    lists[right] = key
    quick_sort(lists, low, left-1)
    quick_sort(lists, left+1, high)
    return lists

二:python3实现二分查找(递归和非递归方式)

def binary_search(num_list, x):
    '''
    二分查找
    '''
    num_list = sorted(num_list)
    left, right = 0, len(num_list)
    while left < right:
        mid = int((left + right) / 2)
        if num_list[mid] > x:
            right = mid
        elif num_list[mid] < x:
            left = mid + 1
        else:
            return '待查元素{0}在列表中下标为:{1}'.format(x, mid)
    return '待查找元素%s不存在指定列表中'%x


def binary_search_(list, left, right, num):
    lis = sorted(list)
    if left > right:  # 递归结束条件
        return -1
    mid = (left + right) // 2
    if num < lis[mid]:
        right = mid - 1
    elif num > lis[mid]:
        left = mid + 1
    else:
        return mid
    return binary_search_(lis, left, right, num)

三:pyhon3实现链表以及链表的基本操作

class Node(object):
    def __init__(self, val, p=0):
        self.data = val
        self.next = p


class LinkList(object):
    def __init__(self):
        self.head = 0

    def init_list(self, data):
        self.head = Node(data[0])
        p = self.head
        for item in data[1:]:
            node = Node(item)
            p.next = node
            p = node

    def get_len(self):
        if self.head == 0:
            return 0
        p = self.head
        length = 1
        while p.next != 0:
            p = p.next
            length += 1
        return length

    def is_empty(self):
        if self.head == 0:
            return True
        else:
            return False

    def clear(self):
        self.head = 0

    def append(self, item):
        if self.head == 0:
            self.head = Node(item)
        p = self.head
        while p.next != 0:
            p = p.next
        node = Node(item)
        p.next = node

    def print_item(self, index):
        if self.is_empty():
            print("链表为空")
            return
        if index < 0 or index > self.get_len():
            print("位置信息错误")
            return
        p = self.head
        for i in range(0, index):
            p = p.next
        print(p.data)

    def insert(self, item, index):
        if self.is_empty():
            print("链表为空")
            return
        if index < 0 or index > self.get_len():
            print("位置信息错误")
            return
        p = self.head
        for i in range(0, index-1):
            p = p.next
        tmp = p.next
        node = Node(item, tmp)
        p.next = node

    def delete(self, index):
        if self.is_empty():
            print("链表为空")
            return
        if index < 0 or index > self.get_len():
            print("位置信息错误")
            return
        p = self.head
        for i in range(0, index-1):
            p = p.next
        p.next = p.next.next

    def print_list(self):
        if self.is_empty():
            print("链表为空")
            return
        p = self.head
        while p != 0:
            print(p.data, end="->")
            p = p.next

if __name__ == "__main__":
    l = LinkList()
    print(l.is_empty())
    l.init_list([2, 3, 4, 5])
    # l.append(7)
    # l.print_list()
    l.insert(0, 2)
    l.print_list()
    # l.delete(2)
    # l.print_list()
    # l.print_item(2)
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值