Python中简单算法(冒泡排序、选择排序、查找(顺序、二分法))

1.冒泡排序:

 比较两个不相邻下标所对应的元素,如果符合条件则交换位置

升序:长度为n的列表中进行元素排列,第一次找到最大值,固定位置n的值;第二次找到第二大值,固定位置n-1处的值,知道所有的值都被固定,则排序完成

#冒泡排序(升序)
list1 = [43,545,4,124,34,323,54]
for i in range(0,len(list1) - 1):            #需要走几次循环
    for j in range(0,len(list1) - 1 - i):
        if list1[j] > list1[j + 1]:
            list1[j],list1[j + 1] = list1[j + 1],list1[j]   #交换两个值
print(list1)

2.选择排序:

 固定一个下标,然后使用这个下标对应的元素和列表中其他元素进行一次对比,如果符合条件则交换位置

升序:长度为n的列表中进行元素排列,第一次找到最小值,固定位置0的值;第二次找到第二小值,固定位置1处的值,知道所有的值都被固定,则排序完成

#选择排序(升序)
list1 = [43,545,4,124,34,323,54]
for i in range(len(list1) - 1):            #从0位置开始固定元素,外层控制轮数
    for j in range(i + 1,len(list1)):      #最小值在左边,一轮固定一次,直到所有都固定完成,控制每轮比较次数
        if list1[i] > list1[j]:
            list1[i],list1[j] = list1[j],list1[i]
print(list1)

3.查找: 

(1)顺序查找:

遍历指定列表,依次将要查找的数据和列表中的元素进行依次对比,如果相等,则输出索引

#顺序查找
list1 = [43,545,4,124,34,323,54]
keyword = 124
index = 0
#遍历列表
for i in range(len(list1)):
    if keyword == list1[i]:
        index = i
        print(index)

(2)二分法查找:

前提条件,必须是排好序的列表【局限性】;通过折半来缩小查找范围,提高查找效率

#二分查找[前提序列已经排序好,升序]
list1 = [23,43,45,67,88,90,100]
#待查找的数据
key = 43
#定义变量用于记录下标
left = 0
right = len(list1) - 1
#left和right在不断调整,当left和right相等时,说明这个列表被查找了一遍
#循环每执行一次,middle就变换一次
while left <= right:
    middle = (left + right) // 2
    if key > list1[middle]:
        left = middle + 1
    elif key < list1[middle]:
        right = middle - 1
    else:
        print("元素下标为:",middle)
        #当left<right时,已经查找到了元素,此时强制停止循环
        break

猜你喜欢

转载自blog.csdn.net/qq_38358499/article/details/88800193