问题描述:
实现插入排序、快速排序、冒泡排序算法,为每种排序程序给出一组输入,并打印出程序执行时间。
代码如下:
# -*- coding: utf-8 -*-
"""
Created on Tue Sep 20 09:03:59 2022
@author: Dell
"""
import time
def bubble_sort(arry): #冒泡排序
n = len(arry) #获得数组的长度
for i in range(n):
for j in range(1, n-i): # 每轮找到最大数值 或者用 for j in range(i+1, n)
if arry[j-1] > arry[j] : #如果前者比后者大
arry[j-1],arry[j] = arry[j], arry[j-1] #则交换两者
return arry
def insert_sort(ary): # 插入排序
count = len(ary)
for i in range(1, count):
key = i - 1
mark = ary[i] # 注: 必须将ary[i]赋值为mark,不能直接用ary[i]
while key >= 0 and ary[key] > mark:
ary[key+1] = ary[key]
key -= 1
ary[key+1] = mark
return ary
def quick_sort(ary): #快速排序
return qsort(ary, 0, len(ary) - 1)
def qsort(ary, start, end):
if start < end:
left = start
right = end
key = ary[start]
else:
return ary
while left < right:
while left < right and ary[right] >= key:
right -= 1
if left < right: # 说明打破while循环的原因是ary[right] <= key
ary[left] = ary[right]
left += 1
while left < right and ary[left] < key:
left += 1
if left < right: # 说明打破while循环的原因是ary[left] >= key
ary[right] = ary[left]
right -= 1
ary[left] = key # 此时,left=right,用key来填坑
qsort(ary, start, left - 1)
qsort(ary, left + 1, end)
return ary
if __name__== '__main__':
input_list = [5, 13, 23, 17, 9, 3, 0, 2, 11, 10]
input_list2 = input_list
input_list3 = input_list
print('排序前:',input_list)
t = time.perf_counter()
sorted_list = insert_sort(input_list)
print('插入排序后:', sorted_list)
print(f'cost:{time.perf_counter() - t:.8f}s')
print('排序前:',input_list)
t = time.perf_counter()
sorted_list = quick_sort(input_list2)
print('快速排序后:', sorted_list)
print(f'cost:{time.perf_counter() - t:.8f}s')
print('排序前:',input_list)
t = time.perf_counter()
sorted_list = bubble_sort(input_list3)
print('冒泡排序后:', sorted_list)
print(f'cost:{time.perf_counter() - t:.8f}s')