这里整理的都是基础的不能再基础的算法,目的就是进行一个回忆,同时作为剑指offer的一个补充~嘿嘿~

查找算法
二分查找
# 实现一个二分查找
# 输入:一个顺序list
# 输出: 待查找的元素的位置
def binarySearch(alist, item):
first = 0
last = len(alist) - 1

while first <= last:
mid = (first + last)//2
print(mid)
if alist[mid] > item:
last = mid - 1
elif alist[mid] < item:
first = mid + 1
else:
return mid+1
return -1

test = [0, 1, 2, 8, 13, 17, 19, 32, 42]
print(binarySearch(test, 3))
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
排序算法
冒泡排序
def bubbleSort(alist):
for passnum in range(len(alist)-1, 0, -1):
for i in range(passnum):
if alist[i] > alist[i+1]:
alist[i], alist[i+1] = alist[i+1], alist[i]
return alist
1
2
3
4
5
6
插入排序
def insertionSort(alist):
for index in range(1, len(alist)):
currentvalue = alist[index]
position = index

while position > 0 and alist[position-1] > currentvalue:
alist[position] = alist[position-1]
position -= 1
alist[position] = currentvalue
1
2
3
4
5
6
7
8
9
快速排序
def quickSort(alist):
quickSortHelper(alist, 0, len(alist)-1)

def quickSortHelper(alist, first, last):
if first < last:
splitPoint = partition(alist, first, last)

quickSortHelper(alist, first, splitPoint-1)
quickSortHelper(alist, splitPoint+1, last)

def partition(alist, first, last):
pivotvlue = alist[first]

leftmark = first+1
rightmark = last
done = False

while leftmark > rightmark:
while alist[leftmark] <= pivotvlue and leftmark <= rightmark:
leftmark += 1
while alist[rightmark] >= pivotvlue and rightmark >= leftmark:
rightmark -= 1
alist[leftmark], alist[rightmark] = alist[rightmark], alist[leftmark]
alist[rightmark], alist[first] = alist[first], alist[rightmark]
return rightmark
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
选择排序
def selectionSort(alist):
for i in range(len(alist)-1):
min = i
for j in range(i+1, len(alist)):
if alist[j] < alist[min]:
min = j
alist[i], alist[min] = alist[min], alist[i]
return alist
1
2
3
4
5
6
7
8
9
冒泡排序
class Solution:
def bubbleSort(nums):
# 这个循环负责设置冒泡排序进行的次数
for i in range(len(nums)-1):
# j为列表下标
for j in range(len(nums)-i-1):
if nums[j] > nums[j+1]:
nums[j], nums[j+1] = nums[j+1], nums[j]
return nums
1
2
3
4
5
6
7
8
9
树的四种遍历方式
class node(object):
def __init__(self,data=None,left=None,right=None):
self.data=data
self.left=left
self.right=right

#深度
def depth(tree):
if tree==None:
return 0
left,right=depth(tree.left),depth(tree.right)
return max(left,right)+1
#前序遍历
def pre_order(tree):
if tree==None:
return
print tree.data
pre_order(tree.left)
pre_order(tree.right)
#中序遍历
def mid_order(tree):
if tree==None:
return
mid_order(tree.left)
print tree.data
mid_order(tree.right)
#后序遍历
def post_order(tree):
if tree==None:
return
post_order(tree.left)
post_order(tree.right)
print tree.data

#层次遍历
def level_order(tree):
if tree==None:
return
q=[]
q.append(tree)
while q:
current=q.pop(0)
print current.data
if current.left!=None:
q.append(current.left)
if current.right!=None:
q.append(current.right)
---------------------
作者:alicelmx
来源:CSDN
原文:https://blog.csdn.net/alicelmx/article/details/80429229
版权声明:本文为博主原创文章,转载请附上博文链接!

【python】面试常考数据结构算法的更多相关文章

  1. Java面试常考------------------------垃圾收集算法

    对于Java系学生而言,Java虚拟机中的垃圾收集算法是一个很重要的面试考点. 常用的垃圾收集算法主要可划分为以下三类: 1. 标记-清除算法 标记清除算法是一种比较简单的方法,直接标记内存中待回收的 ...

  2. Python面试常考点之深入浅出链表操作

    Python面试常考点之深入浅出链表操作 在Python开发的面试中,我们经常会遇到关于链表操作的问题.链表作为一个非常经典的无序列表结构,也是一个开发工程师必须掌握的数据结构之一.在本文中,我将针对 ...

  3. PHP面试常考内容之Memcache和Redis(2)

    你好,是我琉忆.继周一(2019.2-18)发布的"PHP面试常考内容之Memcache和Redis(1)"后,这是第二篇,感谢你的支持和阅读.本周(2019.2-18至2-22) ...

  4. PHP面试常考内容之Memcache和Redis(1)

    你好,是我琉忆.继上周(2019.2-11至2-15)发布的"PHP面试常考内容之面向对象"专题后,发布的第二个专题,感谢你的阅读.本周(2019.2-18至2-22)的文章内容点 ...

  5. 前端面试常考知识点---CSS

    前端面试常考知识点---js 1.CSS3的新特性有哪些 点我查看 CSS3选择器 . CSS3边框与圆角 CSS3圆角border-radius:属性值由两个参数值构成: value1 / valu ...

  6. PHP面试常考之会话控制

    你好,是我琉忆,欢迎您来到PHP面试专栏.本周(2019.2-25至3-1)的一三五更新的文章如下: 周一:PHP面试常考之会话控制周三:PHP面试常考之网络协议周五:PHP面试常考题之会话控制和网络 ...

  7. PHP面试常考内容之面向对象(3)

    PHP面试专栏正式起更,每周一.三.五更新,提供最好最优质的PHP面试内容.继上一篇"PHP面试常考内容之面向对象(2)"发表后,今天更新面向对象的最后一篇(3).需要(1),(2 ...

  8. PHP面试常考内容之面向对象(2)

    PHP面试专栏正式起更,每周一.三.五更新,提供最好最优质的PHP面试内容.继上一篇"PHP面试常考内容之面向对象(1)"发表后,今天更新(2),需要(1)的可以直接点击文字进行跳 ...

  9. PHP面试常考内容之面向对象(1)

    PHP中面向对象常考的知识点有以下几点,我将会从以下几点进行详细介绍说明,帮助你更好的应对PHP面试常考的面向对象相关的知识点和考题. 整个面向对象文章的结构涉及的内容模块有: 一.面向对象与面向过程 ...

随机推荐

  1. vs2010打包安装

    [WinForm] VS2010发布.打包安装程序(超全超详细) 2017年02月17日 21:47:09 y13156556538 阅读数:16487更多 个人分类: C#winform   1. ...

  2. Linux 替换^M字符 方法

    转自:http://blog.csdn.net/lhf_tiger/article/details/8203013 真恶心,10X流程产生的csv文件的行位居然有^M字符,害我一直在找报错原因,真是坑 ...

  3. py to exe —— pywin32

    xu言: 最近研究python,觉得做些windows小工具还挺好玩,就研究了下py代码如何转成exe 这里用到一个工具 pywin32 https://sourceforge.net/project ...

  4. HDU-3480 Division (四边形不等式优化DP)

    题目大意:将n个数分成m组,将每组的最大值与最小值的平方差加起来,求最小和. 题目分析:先对数排序.定义状态dp(i,j)表示前 j 个数分成 i 组得到的最小和,则状态转移方程为dp(i,j)=mi ...

  5. SQL ltrim() 和 rtrim() 函数

    LTRIM删除起始空格后返回字符表达式. 语法LTRIM ( character_expression ) 参数character_expression 是字符或二进制数据表达式.character_ ...

  6. EBS OAF开发中的错误/异常处理(ErrorHandling) (转)

    原文地址 EBS OAF开发中的错误/异常处理(ErrorHandling) EBS OAF开发中的错误/异常处理(ErrorHandling) (版权声明,本人原创或者翻译的文章如需转载,如转载用于 ...

  7. sql 数据库显示 正在恢复

    问题原因:Sql Server 一直显示正在恢复.有事务未恢复或者还原数据库造成 处理办法: 步骤一:数据库上右键->任务->分离 步骤二:数据库上右键->任务->脱机 数据库 ...

  8. BZOJ1342 [Baltic2007]Sound静音问题

    越来越水了... 这道题是简单的单调队列,同时维护最大值和最小值即可. 另解:multiset大法求区间最大最小,但是复杂度会上升... /****************************** ...

  9. learning scala 变量

    scala 变量: val : 声明时,必须被初始化,不能再重新赋值. scala> test = "only1"<console>:11: error: not ...

  10. hdu 1159 Common Subsequence (最长公共子序列 +代码)

    Problem Description A subsequence of a given sequence is the given sequence with some elements (poss ...