python算法基础与数据结构

本文介绍了算法的基础概念,包括算法定义、时间复杂度和空间复杂度的评估,以及递归原理。接着讲解了查找技术,如线性查找和二分查找。最后,探讨了列表排序的方法,如冒泡排序、选择性排序和堆排序。
摘要由CSDN通过智能技术生成

目录
01 | 算法基础概念
02 | 查找
03 | 列表排序

01 | 算法基础概念

1.算法概念
算法(Algorithm):一个计算过程,解决问题的方法
程序=数据结构+算法

2.时间复杂度
评估算法运行效率`

# 不同算法运行效率不同 print('Hello World')

for i in range(n): 
print('Hello World')

for i in range(n): 
    for j in range(n):
        print('Hello World')

3.空间复杂度
评估算法内存占用大小

4.递归
①递归两个特点:
-调⽤用⾃自身
-结束条件

②递归实例——汉诺塔问题
-大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘。
-大梵天命令婆罗门把圆盘从下面开始按大小顺序重新摆放在另一根柱子上。
-在小圆盘上不能放大圆盘,在三根柱子之间一次只能移动一个圆盘。
-64根柱子移动完毕之日,就是世界毁灭之时。
在这里插入图片描述
在这里插入图片描述
n个盘⼦子时:
-把n-1个圆盘从A经过C移动到B
-把第n个圆盘从A移动到C
-把n-1个⼩小圆盘从B经过A移动到C
在这里插入图片描述

def hanoi (n,a,b,c):
    if n > 0:
        hanoi(n-1,a,c,b)
        print('从%s移动到%s'%(a,c))
        hanoi(n - 1, b, a, c)

print(hanoi(3,'a','b','c'))

'''
从a移动到c
从a移动到b
从c移动到b
从a移动到c
从b移动到a
从b移动到c
从a移动到c
'''

02 | 查找

1.列表查找
在数据元素中,通过一定的方法找出与给定关键字相同的数据元素的过程
①列表查找 / 线性查找
从列列表第⼀一个元素开始,顺序进行行搜索,直到找到元素或搜索到列列表最后一个元素为止
-输入:列表、待查找元素
-输出:元素下标(未找到元素时⼀一般返回None或-1)

②二分查找
(又叫折半查找,从有序列表的初始候选区li[0:n]开始,通过对待查找的值与候选区中间值的比较,可以使候选区减少一半)

例子
从列表中寻找3
在这里插入图片描述

def bin_search(data_set, value):
    low = 0
    high = len(data_set) - 1
    #进入循环
    while low <= high:
        mid = (low+high)//2
        if data_set[mid] == value:
            return mid
        #把high移动到mid左边    
        elif data_set[mid] > value:
            high = mid - 1
        else:
            low = mid + 1
#如果value不在data_set里面,则返回none

03 | 列表排序

1.排序
将“无序”的序列调整为“有序”序列

2.排序类别
①冒泡排序
列表每两个相邻的数,如果前面比后面大,则交换这两个数

    for i in range(len(li) - 1):#list共有len(li)-1趟
        for j in range(len(li) - i - 1):
            if li[j] > li[j + 1]:
                li[j],li[j + 1] = li[j + 1],li[j]
            print(li)

li = [3,4,6,2,7,1,9,8] bubble_sort(li) ```

②选择性排序
遍历排序记录最小数,放到第一个位置
再遍历排序记录列列表无序区最小的数,放到第二个位置,以此类推

def select_sort_simple(li):
    li_new = []
    #遍历len(li)遍
    for i in range(len(li)):
            min_val = min(li)
            li_new.append(min_val)
            li.remove(min_val)
    return li_new

li = [2,1,7,6,8,5,10,9]
print(select_sort_simple(li))

'''[1, 2, 5, 6, 7, 8, 9, 10]

Process finished with exit code 0'''

③堆排序

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值