python 实现常见的排序算法(冒泡排序,选择排序,插入排序)
这几种排序方法非常简单,直接上代码:
冒泡排序
import random
import time
'''
冒泡排序python实现
基本实现原理:每一次遍历选出最大(最小)值
'''
# 自定义装饰器
def timer_count(f):
def decor(*args,**kwargs):
s_time = time.time()
r = f(*args,**kwargs)
e_time = time.time()
print("{}函数耗时{}秒".format(f.__name__,e_time-s_time))
return r
return decor
l = [random.randint(0,30) for x in range(20)]
# 最普通冒泡排序,升序,数据随机
@timer_count
def bullle_way1(l):
print('排序前',l)
for i in range(len(l)-1):
for j in range(i,len(l)):
if l[i] > l[j]:
t = l[i]
l[i] = l[j]
l[j] = t
print('排序后',l)
# 对前方部分无序,到达某个值后有序的冒泡排序方法
@timer_count
def bullle_way2(l):
print('排序前', l)
for i in range(len(l)-1):
for j in range(i,len(l)):
onoff = True
while onoff:
onoff = False
if l[i] > l[j]:
onoff = True
t = l[i]
l[i] = l[j]
l[j] = t
print('排序后', l)
if __name__ == '__main__':
bullle_way1(l)
bullle_way2(l)
选择排序
#!/usr/bin/env python
# -*-coding:utf-8-*-
# @Time:2021/7/6 10:59
# @Author:ZhangFY
# @File:select_sort.py
import random
import time
'''
选择排序 python 实现方法
算法核心,类似于冒泡排序算法,每次从无序数据中选出一个最大(小)值,插入到前方有序队列中去
'''
# 自定义装饰器
def timer_count(f):
def decor(*args,**kwargs):
s_time = time.time()
r = f(*args,**kwargs)
e_time = time.time()
print("{}函数耗时{}秒".format(f.__name__,e_time-s_time))
return r
return decor
def select_way1(l):
print('排序前:',l)
for i in range(len(l)-1):
min = l[i] # 每一轮循环的最小值
index = i
for j in range(i,len(l)):
if l[j] < min:
min = l[j]
index = j
l[i],l[index] = l[index],l[i]
print("排序后:",l)
if __name__ == '__main__':
l = [random.randint(10,100) for x in range(10)]
select_way1(l)
插入排序
import random
import time
'''
插入排序 python 实现过程
算法核心,单个元素可认为是有序队列,插入过程为单个元素操作
'''
# 自定义装饰器
def timer_count(f):
def decor(*args,**kwargs):
s_time = time.time()
r = f(*args,**kwargs)
e_time = time.time()
print("{}函数耗时{}秒".format(f.__name__,e_time-s_time))
return r
return decor
l = [random.randint(0,30) for x in range(20)]
# 普通插入排序
def insert_way1(l):
print('排序前',l)
for i in range(1,len(l)): # 当前第一个元素可认为有序序列
j = i
x = l[i] # 待插入的数值
while j > 0 and l[j-1] > x:
l[j] = l[j-1]
j -= 1
l[j] = x
print('排序后',l)
if __name__ == '__main__':
insert_way1(l)
初次写技术博客,目前肯定还存在很多不足之处,欢迎留言指正。:个人github地址