算法入门笔记(二,查找与排序)

继续学习算法,如果笔记对你有帮助,不要忘了点赞,如果有问题?希望大家批评指出。谢谢大家。

列表查找:
输入:列表与带查找元素
输出:元素下标(未找到元素时一般返回None与-1)
方法一:
顺序查找:(线性表查找,从列表第一个开始,顺序进搜索到末尾元素)

def linear(ls,val):
    #读取列表
    for ind , i in enumerate(ls):
        #元素进行匹配
        if i == val :
            #返回下标
            return ind
    else:
        return None
ls=[12,2,3,4,5,6]
print(linear(ls,2))

#python内置查找为线性查找
ls=[12,13,17,15,19]
ls.index(12)#线性查找

二分查找:(折半查找,从有序的列表中,通过对列表中间的数与查找数进行比较,可以减少一半查找)效率高

def half_find(ls,val):
    ls=sorted(ls)#对列表进行排序从小到大
    left=0
    right=len(ls)-1
    while left <= right :#确定有值
        mid = (left+right) // 2
        if ls[mid] == val:
            return mid
        elif ls[mid] > val :#是否在左边
            right=mid-1
        else:#是否在右边
            left=mid+1
    else:
        #没有找到
        return None
ls=[12,13,14,2,3,4]
print(half_find(ls,2))

列表排序:将无序列表转化为有序列表
输入:列表
输出:有序列表(升序,降序)

ls=[12,13,17,15,19,45,1,2,3,6,5,4]
ls.sort()#内置升序函数
print(ls)

1,冒泡排序(列表相邻二个数,如果前面比后面大,则交换这二个数,如果后面一个数大,不进行交换,大数在向下一个数进行比较。一趟排序完成后,则无序区减少一个数,有序区增加一个数)

def bubble(ls):
    for i in range(len(ls)-1):#第i趟
        for j in range(len(ls)-i-1):#指针
            if ls[j]>ls[j+1]:#进行比较:改成降序换成<
                ls[j],ls[j+1]=ls[j+1],ls[j]
ls=[3,2,4,6,5,1,8,9,20]
bubble(ls)
print(ls)

2,选择排序(先遍历一遍找最小的数,再遍历一遍找第二个最小值,继续遍历,继续排序)

def select(ls):
    for i in range(len(ls)-1):#第几趟
        min_loc=i#假设最小值为第一个数,记录下标
        for j  in range(i+1,len(ls)):#从i+1读取到末尾
            if ls[j] <ls[min_loc]:
                min_loc=j
        ls[i],ls[min_loc] =ls[min_loc],ls[i]#交换位置

ls=[1,3,2,9,8,7,6,5]
select(ls)
print(ls)

3,插入排序(开始从无序中取第一个元素,插入到有序区,再取一个元素再插入到正确位置,依次进行读取插入)

def insert(ls):
    for i in range(1,len(ls)):#i表示抽取元素下标
        tmp=ls[i]
        j=i-1#插入元素下标
        while ls[j] >tmp and j >=0 :
            ls[j+1] =ls[j]
            j -= 1
        ls[j+1]=tmp
ls=[9,5,4,3,7,8]
insert(ls)
print(ls)

猜你喜欢

转载自blog.csdn.net/weixin_47514459/article/details/115014647