python实现冒泡排序、快速排序,以及执行效率对比
冒泡排序
import time
import random
def bubble_sort(li):
"""冒泡排序"""
length = len(li)
for x in range(0, length - 1):
for y in range(x + 1, length):
if li[x] > li[y]:
li[x], li[y] = li[y], li[x]
if __name__ == '__main__':
start_time = time.time()
li = [i for i in range(10000)]
random.shuffle(li)
bubble_sort(li)
print(time.time() - start_time) # 耗时:9s左右
print(li[:100])
windows2016款机器耗时:7-9秒左右,mac m1耗时:3秒左右。
快速排序-方法1
import random
import time
def partition(li, left, right):
while left < right:
while left < right and li[left] <= li[right]:
left += 1
li[left], li[right] = li[right], li[left]
while left < right and li[right] >= li[left]:
right -= 1
li[right], li[left] = li[left], li[right]
return left
def quick_sort(li, left, right):
if left < right:
mid = partition(li, left, right)
quick_sort(li, left, mid - 1)
quick_sort(li, mid + 1, right)
if __name__ == '__main__':
start_time = time.time()
li = [i for i in range(10000)]
random.shuffle(li)
quick_sort(li, 0, len(li) - 1)
print(time.time() - start_time) # 耗时60ms左右
print(li[:100])
windows2016款机器耗时:60-70毫秒左右。
你的机器耗时多少秒呢?来评论看看
快速排序-方法2
import random
import time
def partition(li, left, right):
tmp = li[left]
while left < right:
while left < right and li[right] >= tmp: # 从右边找比tmp小的数
right -= 1
li[left] = li[right]
while left < right and li[left] <= tmp: # 从左边找比tmp大的数
left += 1
li[right] = li[left]
li[left] = tmp
return left
def quick_sort(li, left, right):
if left < right:
mid = partition(li, left, right)
quick_sort(li, left, mid - 1)
quick_sort(li, mid + 1, right)
if __name__ == '__main__':
start_time = time.time()
li = [i for i in range(1000000)]
random.shuffle(li)
quick_sort(li, 0, len(li) - 1)
print(time.time() - start_time)
print(li[:100])
非递归方法实现快速排序
import time
import random
import collections
def partition(li, left, right):
tmp = li[left]
while left < right:
while left < right and li[right] >= tmp: # 从右边找比tmp小的数
right -= 1
li[left] = li[right]
while left < right and li[left] <= tmp: # 从左边找比tmp大的数
left += 1
li[right] = li[left]
li[left] = tmp
return left
def quick_sort(arr, left, right):
stack = collections.deque()
stack.append(left)
stack.append(right)
while len(stack) > 0:
right = stack.pop()
left = stack.pop()
if left < right:
mid = partition(arr, left, right)
stack.append(left)
stack.append(mid - 1)
stack.append(mid + 1)
stack.append(right)
if __name__ == '__main__':
list1 = [i for i in range(1000000)]
random.shuffle(list1)
print(list1[:100])
start = time.time()
quick_sort(list1, 0, len(list1) - 1)
print(time.time() - start)
print(list1[:100])
分类:
python数据结构与算法
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)