数据结构 排序算法的python实现

# # 冒泡排序、
count = 0
list1 = [9, 1, 7, 3, 2, 4, 6]
# j表示每次遍历需要比较的次数,是逐渐减小的
for j in range(len(list1)-1, 0, -1):
    print(f'这是第{len(list1)-j}轮排序开始')
    for i in range(j):
        if list1[i] > list1[i+1]:
            list1[i], list1[i + 1] = list1[i+1], list1[i]
            count += 1
        print(list1)
    print(f'这是第{len(list1)-j}轮排序结束')
print(f'总共交换{count}次')
print(list1)
运行结果:
这是第1轮排序开始
[1, 9, 7, 3, 2, 4, 6]
[1, 7, 9, 3, 2, 4, 6]
[1, 7, 3, 9, 2, 4, 6]
[1, 7, 3, 2, 9, 4, 6]
[1, 7, 3, 2, 4, 9, 6]
[1, 7, 3, 2, 4, 6, 9]
这是第1轮排序结束
这是第2轮排序开始
[1, 7, 3, 2, 4, 6, 9]
[1, 3, 7, 2, 4, 6, 9]
[1, 3, 2, 7, 4, 6, 9]
[1, 3, 2, 4, 7, 6, 9]
[1, 3, 2, 4, 6, 7, 9]
这是第2轮排序结束
这是第3轮排序开始
[1, 3, 2, 4, 6, 7, 9]
[1, 2, 3, 4, 6, 7, 9]
[1, 2, 3, 4, 6, 7, 9]
[1, 2, 3, 4, 6, 7, 9]
这是第3轮排序结束
这是第4轮排序开始
[1, 2, 3, 4, 6, 7, 9]
[1, 2, 3, 4, 6, 7, 9]
[1, 2, 3, 4, 6, 7, 9]
这是第4轮排序结束
这是第5轮排序开始
[1, 2, 3, 4, 6, 7, 9]
[1, 2, 3, 4, 6, 7, 9]
这是第5轮排序结束
这是第6轮排序开始
[1, 2, 3, 4, 6, 7, 9]
这是第6轮排序结束
总共交换11次
[1, 2, 3, 4, 6, 7, 9]
# 选择排序
count = 0
list1 = [9, 1, 7, 3, 2, 4, 6]
for i in range(len(list1)):
    # 记录最小位置
    min_index = i
     # 从i+1位置到末尾选择出最小数据
    for j in range(i+1, len(list1)):
        if list1[min_index] > list1[j]:
            min_index = j
    # 如果选择出的数据不在正确位置,进行交换
    if min_index != i:
        list1[i], list1[min_index] = list1[min_index], list1[i]
        count += 1
    print(list1)
print(count)
运行结果:
[1, 9, 7, 3, 2, 4, 6]
[1, 2, 7, 3, 9, 4, 6]
[1, 2, 3, 7, 9, 4, 6]
[1, 2, 3, 4, 9, 7, 6]
[1, 2, 3, 4, 6, 7, 9]
[1, 2, 3, 4, 6, 7, 9]
[1, 2, 3, 4, 6, 7, 9]
5
# 插入排序
count = 0
list1 = [9, 1, 7, 3, 2, 4, 6]
for i in range(1, len(list1)):
    for j in range(i, 0, -1):
        if list1[j] < list1[j-1]:
            list1[j], list1[j - 1] = list1[j-1], list1[j]
            count += 1
    print(list1)
print(count)
运行结果:
[1, 9, 7, 3, 2, 4, 6]
[1, 7, 9, 3, 2, 4, 6]
[1, 3, 7, 9, 2, 4, 6]
[1, 2, 3, 7, 9, 4, 6]
[1, 2, 3, 4, 7, 9, 6]
[1, 2, 3, 4, 6, 7, 9]
11
# 二分法的递归实现
def binary_search(list1, value):
    if len(list1) == 0:
        return False
    mid = len(list1)//2
    if list1[mid] == value:
        return True
    if list1[mid] > value:
        return binary_search(list1[:mid], value)
    if list1[mid] < value:
        return binary_search(list1[mid+1:], value)


list1 = [1, 2, 3, 4, 5, 6, 7, 9, 11, 15]
print(binary_search(list1, 15))
print(binary_search(list1, 34))
运行结果:
True
False

猜你喜欢

转载自blog.csdn.net/weixin_42336579/article/details/81363677