Python3 查找和排序(一)

概要:本文主要测试了一下二分查找法和三种排序(选择、插入、冒泡),做个记录

  • 二分查找
li = [8, 11, 12, 19, 22, 25, 28, 35, 37, 39, 45]

count = 0

# 二分查找
def binary_search(seq, left, right, x):
    global count
    count = count + 1
    mid = int(left + (right - left)/2)
    if x == seq[mid]:
        return mid
    elif x < seq[mid]:
        return binary_search(seq, left, mid - 1, x)
    else:
        return binary_search(seq, mid + 1, right, x)
el = 35
index = binary_search(li, 0, len(li) - 1, el)
print('查找元素:%s,位置:%d, 共查找了%d次' % (el, index, count))

执行结果:

查找元素:35,位置:7, 共查找了4次
  • 插入排序
def insert_sort(seq):
    # 从第二个元素开始遍历,与前面的元素进行比较
    for i in range(1, len(seq)):
        # 当前元素的值
        val = seq[i]
        # 前一个元素的索引
        j = i - 1
        # 如果当前元素的值小于之前的元素的值
        while j >= 0 and val < seq[j]:
            # 将前一个元素后移
            seq[j + 1] = seq[j]
            # 将指针迁移,取前一个元素比较
            j = j - 1
        # 比较完以后,将该位置赋值当前元素的值
        seq[j + 1] = val

li_insert = [22, 11, 25, 12, 8, 39, 28, 45, 19, 37, 35]
insert_sort(li_insert)
print('排序后的序列为:%s' % (','.join(map(str, li_insert)),))

执行结果:

排序后的序列为:8,11,12,19,22,25,28,35,37,39,45
  • 选择排序
def select_sort(seq):
    # 遍历序列
    for i in range(0, len(seq)):
        # 用于保存最小值所在是索引
        idx = i
        # 遍历当前元素之后的序列
        for j in range(i + 1, len(seq)):
            # 当该值小于最小值索引的值,则将该索引值赋值给idx
            if seq[j] < seq[idx]:
                idx = j
        # 将当前值与最小值索引位的值交换
        seq[i], seq[idx] = seq[idx], seq[i]

li_select = [22, 11, 25, 12, 8, 39, 28, 45, 19, 37, 35]
select_sort(li_select)
print('排序后的序列为:%s' % (','.join(map(str, li_select)),))

执行结果:

排序后的序列为:8,11,12,19,22,25,28,35,37,39,45
  • 冒泡排序
def bubble_sort(seq):
    for i in range(0, len(seq)):
        for j in range(i + 1, len(seq)):
            if seq[i] > seq[j]:
                seq[i], seq[j] = seq[j], seq[i]


li_bubble = [22, 11, 25, 12, 8, 39, 28, 45, 19, 37, 35]
bubble_sort(li_bubble)
print('排序后的序列为:%s' % (','.join(map(str, li_bubble)),))

执行结果:

排序后的序列为:8,11,12,19,22,25,28,35,37,39,45
发布了40 篇原创文章 · 获赞 31 · 访问量 62万+

猜你喜欢

转载自blog.csdn.net/weixin_38422258/article/details/104474406