基础算法概念: 

时间复杂度

时间复杂度是从其增速的角度度量的,

时间复杂度一般用大O法表示。

递归

递归指的是调用自己的函数。

如果使用循环,程序性能可能更高;

如果使用递归,程序可能更容易理解。

基线条件:函数不再调用自己的条件,

递归条件:函数调用自己的条件。

二分法查找(递归)(时间复杂度O(logn)):

def binary_search(arr, key):
left = 0
right = len(arr) - 1
while right >= left:
mid = (left + right)/2
if key > arr[mid]:
left = mid + 1
elif key < arr[mid]:
right = mid - 1
else:
return mid
return -1 a = [1, 2, 3, 4, 5, 6, 7, 8, 9]
print binary_search(a, 11)

选择排序(时间复杂度O(n2))

def findSmallest(arr):
smallest = arr[0] # 储存最小的直
smallest_index = 0 # 储存最小元素的索引
for i in range(1, len(arr)):
if arr[i] < smallest:
smallest = arr[i]
smallest_index = i
return smallest_index def selectionSort(arr): # 对数组进行排序
newArr = []
for i in range(len(arr)):
smallest = findSmallest(arr) # 找出数组中最小的数加入新数组
newArr.append(arr.pop(smallest))
return newArr print selectionSort([5, 3, 6, 2, 10])

快速排序(递归)(时间复杂度O(nlogn)):

def quicksort(array):
if len(array) < 2:
return array # 基线条件:为空或只包含一个元素的数组有序
else:
pivot = array[0] # 递归条件
lesser = [i for i in array[1:] if i <= pivot] # 所有小于等于基准值的元素组成数组
greater = [i for i in array[1:] if i > pivot] # 所有大于基准值的元素组成数组
return quicksort(lesser) + [pivot] + quicksort(greater) print(quicksort([10, 5, 2, 3]))

快速排序(非递归):

# -*- coding:utf-8 -*-
from collections import deque def quick_sort(arr):
deq = deque([0, len(arr) - 1])
while deq:
low = deq.popleft()
l = low
high = deq.popleft()
h = high
pivot = arr[low]
while high > low:
while high > low and arr[high] > pivot:
high = high - 1
arr[high], arr[low] = arr[low], arr[high]
while high > low and arr[low] < pivot:
low = low + 1
arr[high], arr[low] = arr[low], arr[high]
arr[high] = pivot
m = high
if m != l:
deq.append(l)
deq.append(m - 1)
if m != h:
deq.append(m + 1)
deq.append(h)
return arr print quick_sort([24, 2, 3, 23, 4, 7, 5])

冒泡排序:

def bubblesort(array):
for i in range(len(array)):
for j in range(len(array)-1-i):
if array[j] < array[j+1]:
array[j], array[j+1] = array[j+1], array[j] p = [1, 7, 9, 2, 3, 4, 5, 5]
bubblesort(p)
print p

归并排序:

def merge(arr1, arr2):
arr = []
while len(arr1) != 0 and len(arr2) != 0:
if arr1[0] > arr2[0]:
arr.append(arr1.pop(0))
else:
arr.append(arr2.pop(0))
return arr + arr1 + arr2 def mergeSort(array):
if len(array) < 2:
return array
mid = len(array) / 2
left = mergeSort(array[:mid])
right = mergeSort(array[mid:])
return merge(left, right) c = [2, 6, 4, 0, 8, 5, 3]
print mergeSort(c)

算法基本概念及常用算法Python实现的更多相关文章

  1. Python之路,Day21 - 常用算法学习

    Python之路,Day21 - 常用算法学习   本节内容 算法定义 时间复杂度 空间复杂度 常用算法实例 1.算法定义 算法(Algorithm)是指解题方案的准确而完整的描述,是一系列解决问题的 ...

  2. Python常用算法

    本节内容 算法定义 时间复杂度 空间复杂度 常用算法实例 1.算法定义 算法(Algorithm)是指解题方案的准确而完整的描述,是一系列解决问题的清晰指令,算法代表着用系统的方法描述解决问题的策略机 ...

  3. 第四百一十四节,python常用算法学习

    本节内容 算法定义 时间复杂度 空间复杂度 常用算法实例 1.算法定义 算法(Algorithm)是指解题方案的准确而完整的描述,是一系列解决问题的清晰指令,算法代表着用系统的方法描述解决问题的策略机 ...

  4. Python之路:常用算法与设计模式

    选择排序 时间复杂度 二.计算方法 1.一个算法执行所耗费的时间,从理论上是不能算出来的,必须上机运行测试才能知道.但我们不可能也没有必要对每个算法都上机测试,只需知道哪个算法花费的时间多,哪个算法花 ...

  5. python拓展3 常用算法

    知识内容: 1.递归复习 2.算法基础概念 3.查找与排序 参考资料: http://python3-cookbook.readthedocs.io/zh_CN/latest/index.html h ...

  6. python常用算法学习(3)

    1,什么是算法的时间和空间复杂度 算法(Algorithm)是指用来操作数据,解决程序问题的一组方法,对于同一个问题,使用不同的算法,也许最终得到的结果是一样的,但是在过程中消耗的资源和时间却会有很大 ...

  7. python机器学习的常用算法

    Python机器学习 学习意味着通过学习或经验获得知识或技能.基于此,我们可以定义机器学习(ML)如下 - 它可以被定义为计算机科学领域,更具体地说是人工智能的应用,其为计算机系统提供了学习数据和从经 ...

  8. python 常用算法学习(2)

    一,算法定义 算法(Algorithm)是指解题方案的准确而完整的描述,是一系列解决问题的清晰指令,算法代表着用系统的方法描述解决问题的策略机制.也就是说,能够对一定规范的输入,在有限时间内获得所要求 ...

  9. 具体knn算法概念参考knn代码python实现

    具体knn算法概念参考knn代码python实现上面是参考<机器学习实战>的代码,和knn的思想 # _*_ encoding=utf8 _*_ import numpy as npimp ...

随机推荐

  1. python导入自定义的库

    一.导入项目文件夹下的模块 1.导入整个模块 import 模块名 2.导入模块的某个函数 from 模块名 import 函数名 示例 untitled是项目文件夹,文件结构如下 ①在a.py导入c ...

  2. swift------导入OC三方类找不到头文件的解决方法

    1.首先新建个 swift工程 2.在swift 中新建 OC 类 比如新建 Request 类,会自动生成个.XXXX-Bridging-Header 类: 3.让后把 导入的第三方头文件导入进去. ...

  3. jquery.timepicker.js - 最常用的日期JS控件

    客户提了个需求,输入日期,想也不用想,立刻翻查Jquery,发现是有timepicker.js这个控件,马上就用. 1. 导入库 <script src="https://cdnjs. ...

  4. 学习spring第四天

    Spring第四天讲义 今日内容 Spring的事务管理 Spring和MyBatis框架的集成 1. Spring的事务管理 1.1. 事务是什么? 在操作数据库时(增删改),如果同时操作多次数据, ...

  5. C#匿名委托,匿名函数,lambda表达式

    一.类型.变量.实例之间的关系. 类型>变量>实例 类型可以创建变量,实体类可以创建实例,实例可以存储在变量里. 二.委托使用过程: 1.定义委托(写好签名): 2.创建委托变量: 3.给 ...

  6. TPO3-2Depletion of Ogallala Aquifer

    The vast grasslands of the High Plains in the central United States were settled by farmers and ranc ...

  7. We don't wanna work!

    We don't wanna work! [JAG Asia 2016] 两个set,一个代表工作的,一个代表不工作的 其实是一个很简单的模拟,但是我竟然排序之前标号.... 检查代码的时候要从头开始 ...

  8. UIView的setNeedsLayout, layoutIfNeeded 和 layoutSubviews 方法之间的关系解释(转)

    layoutSubviews总结 ios layout机制相关方法 - (CGSize)sizeThatFits:(CGSize)size- (void)sizeToFit——————- - (voi ...

  9. windows 环境下Maven私服搭建

    使用Nexus.3.11在Windows环境上搭建1.下载nexus.3.11.zip包https://www.sonatype.com/download-oss-sonatype 下载下来之后,进行 ...

  10. git命令简单使用

    git config --global user.name 'sss' git config --global user.email 'huahua@163.com' cd d:/mywork git ...