1 2 3 4

常见数据结构和算法

算法

算法定义

算法指的是一个计算过程  ,解决问题的方法

常见算法

冒泡排序  选择排序 插入排序  快速排序  归并排序  希尔排序

重点掌握冒泡和快排

1. 衡量算法的标准

时间负责度

算法时间复杂度是一个函数,它定性描述该算法的运行时间  常用大O符号来表示   实际操作中通常指的是代码运行的次数

 

O(1) < O(logn)  < O(n) < O(nlogn)  < O(n2)<O(n2logn)<O(n3)

如何一眼判断时间复杂度?

■循环减半的过程--->O(logn)

■几次循环就是n的几次方的复杂度

空间负责度

空间复杂度(Space Complexity)是对一个算法在运行过程中临时占用存储空间大小的量度,记做S(n)=O(f(n))。

 

2. 各种算法

冒泡排序 (重要)

列表每组两个相邻的数  如果前边的比后边的大  那么就交换两个数

# 时间复杂度 O(n^2)
def bubble_sort(data):
  # 判断是不是列表类型
    if isinstance(data,list):
        for i in range(len(data)):
       # 假定给的列表就是有序的 就不需要再走后面的逻辑了
            flag = True
            for  j in range(len(data)-1):
                if data[j] > data[j+1]:
                    data[j],data[j+1] = data[j+1],data[j]
                    flag = False
       # 给的列表有序
            if flag:
                return

    else:
        raise TypeError
li = [1,5,3,6,2,4,9,8,7]
bubble_sort(li)
print(li) # [1, 2, 3, 4, 5, 6, 7, 8, 9]

  

 

快排(重要)

时间复杂度:  O(nlogn)
思路: 递归  对比  看动图
将左边的第一个数作为一个常数  然后将最右边的数和常数对比  如果比他大 继续往左移动一位继续对比
当不符合时(就是右边的值比常量小)  将右边的值赋值给左边

  

def quickSort(arr):
    if len(arr) <= 1:
        return arr
    pivot = arr[len(arr) // 2]
    print(pivot)
    left = [x for x in arr if x < pivot]
    middle = [x for x in arr if x == pivot]
    right = [x for x in arr if x > pivot]
    return quickSort(left) + middle + quickSort(right)

print(quickSort([3,6,8,10,1,6,2,1]))

 

posted @ 2022-12-08 15:50  犹豫就会拜佛  阅读(37)  评论(0编辑  收藏  举报