算法笔记基础

本文深入探讨了算法的重要性,详细解释了时间复杂度的大O表示法,并对比了不同操作在链表和数组上的时间复杂度。接着介绍了二分查找法的原理,以及数组和链表的特点与优劣。此外,还涵盖了循序表、栈、队列和双端队列的数据结构,以及几种基础排序算法的选择排序、冒泡排序和插入排序。通过对这些基础知识的讲解,有助于提升对算法和数据结构的理解。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、基本内容

1、算法的意义与重要性

好的程序具有:正确性、可拓展性、安全性、健壮性、可维护性以及算法等

2、时间复杂度与大O表示法

大O表示法定义:对于给定的函数g(n),用O(g(n))来表示以下函数的集合:O(g(n))={f(n):存在正常量c和n0,使得对所有n≥n0,有0≤f(n)≤cg(n)}。我们使用的O记号来给出函数的一个在常量因子内的上界

时间比较:O(1) < O(log n) < O(n) < O(n log n) < O(n2) < O(n3) < O(2n) < O(n!) < O(nn)

复杂时间法则:

类型取值法则
for循环从里到外,类似于剥洋葱形式
顺序语句各个运行时间求和
if/else语句路径最长时间

二、主题内容

1、二分查找法

概念:在某一有序数组中查找某一特定元素的搜索算法

步骤:
1.如果中间元素正好是要查找的元素,则搜索过程结束
2.如果某一特定元素大于或者小于中间元素,则在对应的子数组中查找,再次比较中间元素是否相同
3.若出现某一步骤数组为空,则代表没有找到

2、数组与链表

特点:数组,有序且连续;链表,可连续也可不连续

复杂度比较:

操作链表数组
查找O(n)O(1)
头部插入/删除O(1)O(n)
尾部插入/删除O(n)O(1)
中间插入/删除O(n)O(n)

3、循序表

特点:是数组和链表的结合体

4、链表

类型特点
单向链表是数组和链表的结合体,包含头指针和尾指针
双向链表是数组和链表的结合体,包含头节点和尾节点,每一个节点都指向一个前驱和后继

5、栈和队列

类型特点
先进后出(LIFO)
队列先进后出(FIFO)

栈方法:
1.S.push(e):压入栈中
2.S.pop:弹出栈
3.S.top():查询顶部元素
4.S.is_empty():检查栈是否包含元素
5.len(S):检查栈的长度

队列方法:
1.Q.enqueue(e):队尾插入
2.Q.dequeue():队头去除
3.Q.first():查询对头元素
4.Q.is_empty():检查栈是否包含元素
5.len(Q):检查栈的长度

循环队列:避免了队列空间浪费的弊端

双端队列:支持队列的头部和尾部进行插入和删除操作
双端队列方法:
1.D.add_first(e):对头插入
2.D.add_last(e):对尾插入
3.D.delete_first(e):对头删除
4.D.delete_last(e):对尾删除
5.D.first():查询头部元素
6.D.last():查询尾部元素
4.D.is_empty():检查是否包含元素
5.len(D):检查的长度

6、排序

选择排序
特点:1.运行时间和输入无关;2.数据移动是最少的
时间复杂度:O(n2);空间复杂度:O(1)

冒泡排序
特点:运行时间和输入无关;
时间复杂度:O(n2);空间复杂度:O(1)

插入排序
特点:运行时间和输入有关;

希尔排序
结合分组和不长进行插入排序比较

归并排序
对两个不同的数据进行排序进行

快速排序
随机挑出基准值,进行排列

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值