用Python实现插入排序、归并排序、睡眠排序
插入排序
插入排序(insertion sort)
该方法每趟考查列表中的每一项,将其插入新列表,使得这个新列表是排好序的。代码包括两个部分:
- 插入部分,执行将文件插入新列表中的简单任务;
- 排序部分,重复执行插入操作,直到完成排序任务。
def insert_element(sorted_list, element):
"""
将一个元素插入到已经排序的列表中,使列表保持有序。
参数:
sorted_list (list): 已排序的列表。
element (int): 要插入的元素。
返回值:
list: 插入元素后的新排序列表。
"""
# 初始化检查位置为列表的最后一个索引
check_position = len(sorted_list) - 1
# 初始化插入位置为0
insert_position = 0
# 逆序检查元素插入位置
while check_position >= 0:
# stepcounter += 1
if element > sorted_list[check_position]:
insert_position = check_position + 1
break
check_position -= 1
# 在确定的位置插入元素
sorted_list.insert(insert_position, element)
return sorted_list
def insertion_sort(unsorted_list):
"""
使用插入排序算法对无序列表进行排序。
参数:
unsorted_list (list): 无序列表。
返回值:
sorted_list: 排序后的列表。
"""
sorted_list = [] # 初始化一个空的有序列表
while len(unsorted_list) > 0:
element_to_insert = unsorted_list.pop(0) # 取出无序列表的第一个元素
sorted_list = insert_element(sorted_list, element_to_insert) # 插入到有序列表中
return sorted_list
# 示例使用
if __name__ == '__main__':
unsorted_list = [8, 4, 6, 1, 2, 5, 3, 7]
sorted_list = insertion_sort(unsorted_list)
print(sorted_list)
[1, 2, 3, 4, 5, 6, 7, 8]
归并排序
归并排序(merge sort)比插入排序快得多。与插入排序一样, 归并排序包含两个部分:
- 合并两个列表;
- 重复利用合并来完成排序。
import math
def merging(left, right):
"""
将两个有序列表left和right合并为一个新的有序列表new_array
"""
new_array = []
while left and right:
if left[0] <= right[0]:
new_array.append(left.pop(0))
else:
new_array.append(right.pop(0))
new_array.extend(left or right)
return new_array
def mergesort(array):
"""
递归地将列表array分成两半,并对每一半进行排序
然后合并已排序的部分以生成新的有序列表
"""
if len(array) <= 1:
return array
mid = math.floor(len(array) / 2)
left = mergesort(array[:mid])
right = mergesort(array[mid:])
return merging(left, right)
if __name__ == '__main__':
test_array = [3, 1, 9, 0, 6, 13, 16, 2, 9, 7, 3, -4, 2, 5, -9]
new_array = mergesort(test_array)
print(new_array)
[-9, -4, 0, 1, 2, 2, 3, 3, 5, 6, 7, 9, 9, 13, 16]
睡眠排序
在Python中睡眠排序实现方法如下:
- 导入threading模块,为列表中的每个元素创建不同的计算机进程,休眠,然后插入它自己。
- 导入time.sleep模块,为不同的“线程”设置适当的睡眠时间长度。
import threading
from time import sleep
# 创建锁对象,用于确保对sorted_list的线程安全访问
lock = threading.Lock()
sorted_list = []
def sleep_sort(value):
"""
使用休眠排序法对给定的值进行排序
每个线程休眠时间等于其数值,然后将其添加到排序列表中
"""
sleep(value)
with lock: # 确保对共享资源的线程安全访问
sorted_list.append(value)
items = [2, 4, 5, 2, 1, 7]
threads = []
# 为每个元素创建并启动一个线程
for value in items:
thread = threading.Thread(target=sleep_sort, args=(value,))
thread.start()
threads.append(thread)
# 等待所有线程完成
for thread in threads:
thread.join()
print(sorted_list)
[1, 2, 2, 4, 5, 7]
原文地址:https://blog.csdn.net/weixin_74254879/article/details/140731371
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!