一: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)