《算法基础》所有算法的Python实现
2017-09-28 21:31
666 查看
写这篇文章并不是面向读者的,主要就是当记笔记。
我的编程基础太烂,我之前想我以后要搞工程,也不搞ACM,所以一直没有重视算法。但是现在想来,之前的想法就实在可笑了。算法基础不行,不论是搞工程还是搞学术,都太容易触碰到自己的天花板。一句话:目光短浅!
现在打算每天晚上花1~2个小时用在算法上。看算法书或在网上刷题。
由于个人能力尚且太浅,如果真的有人看我下面的代码的话,还请多多指教!
为了比较性能,我写了个用于函数计时的装饰器:
于是每次写代码前要先
P12 LINEAR-SEARCH(A,n,x)
P13 BETTER-LINEAR-SEARCH(A,n,x)
P14 SENTINEL-LINEAR-SEARCH(A,n,x)
今天到此为止。打卡,嘀~
2017/9/28
2017/10/5
写完没保存就关了。。今天主要写了查找和排序的几个算法
今天实在不想再码一遍了,在网上找了个写排序比较好的博客http://python.jobbole.com/82270/
借他几段代码,其他几段代码,尤其是几个查找的代码,以后有空了在码一遍,反正这种基本功多码几遍也亏不了
再推荐一篇文章http://blog.jobbole.com/11745/
http://blog.jobbole.com/79288/
插入排序
希尔排序
这个还需要好好研究一下
冒泡排序
快速排序
这个还需要再看看
选择排序
归并排序
我的编程基础太烂,我之前想我以后要搞工程,也不搞ACM,所以一直没有重视算法。但是现在想来,之前的想法就实在可笑了。算法基础不行,不论是搞工程还是搞学术,都太容易触碰到自己的天花板。一句话:目光短浅!
现在打算每天晚上花1~2个小时用在算法上。看算法书或在网上刷题。
由于个人能力尚且太浅,如果真的有人看我下面的代码的话,还请多多指教!
为了比较性能,我写了个用于函数计时的装饰器:
import time from functools import wraps def ftimer(func): @wraps(func) def function_timer(*args,**kwargs): t0=time.time() result=func(*args,**kwargs) t1=time.time() print 'the running time of function "%s" is %.12f seconds' %(func.__name__,t1-t0) return result return function_timer
于是每次写代码前要先
from decorators import ftimer
P12 LINEAR-SEARCH(A,n,x)
@ftimer def linear_search(A,n,x): ans='NOT_FOUND' for i in range(n): if A[i]==x: ans=i+1 return ans nums=[0,5,2,3,1,4,6] n=len(nums) x=int(raw_input('input a num to search:')) ans=linear_search(nums,n,x) print 'the anwser is',ans
P13 BETTER-LINEAR-SEARCH(A,n,x)
@ftimer def linear_search(A,n,x): ans='NOT_FOUND' for i in range(n): if A[i]==x: ans=i+1 break return ans nums=[0,5,2,3,1,4,6] n=len(nums) x=int(raw_input('input a num to search:')) ans=linear_search(nums,n,x) print 'the anwser is',ans
P14 SENTINEL-LINEAR-SEARCH(A,n,x)
@ftimer def linear_search(A,n,x): last=A[n-1] A[n-1]=x i=0 while A[i]!=x: i+=1 A[n-1]=last if i<n-1 or A[n-1]==x: return i+1 return 'NOT_FOUND' nums=[0,5,2,3,1,4,6] n=len(nums) x=int(raw_input('input a num to search:')) ans=linear_search(nums,n,x) print 'the anwser is',ans
今天到此为止。打卡,嘀~
2017/9/28
2017/10/5
写完没保存就关了。。今天主要写了查找和排序的几个算法
今天实在不想再码一遍了,在网上找了个写排序比较好的博客http://python.jobbole.com/82270/
借他几段代码,其他几段代码,尤其是几个查找的代码,以后有空了在码一遍,反正这种基本功多码几遍也亏不了
再推荐一篇文章http://blog.jobbole.com/11745/
http://blog.jobbole.com/79288/
插入排序
def insert_sort(lists): # 插入排序 count = len(lists) for i in range(1, count): key = lists[i] j = i - 1 while j >= 0: if lists[j] > key: lists[j + 1] = lists[j] lists[j] = key j -= 1 return lists
希尔排序
这个还需要好好研究一下
def shell_sort(lists): # 希尔排序 count = len(lists) step = 2 group = count / step while group > 0: for i in range(0, group): j = i + group while j < count: k = j - group key = lists[j] while k >= 0: if lists[k] > key: lists[k + group] = lists[k] lists[k] = key k -= group j += group group /= step return lists
冒泡排序
def bubble_sort(lists): # 冒泡排序 count = len(lists) for i in range(0, count): for j in range(i + 1, count): if lists[i] > lists[j]: lists[i], lists[j] = lists[j], lists[i] return lists
快速排序
这个还需要再看看
def quick_sort(lists, left, right): # 快速排序 if left >= right: return lists key = lists[left] low = left high = right while left < right: while left < right and lists[right] >= key: right -= 1 lists[left] = lists[right] while left < right and lists[left] <= key: left += 1 lists[right] = lists[left] lists[right] = key quick_sort(lists, low, left - 1) quick_sort(lists, left + 1, high) return lists
选择排序
def select_sort(lists): # 选择排序 count = len(lists) for i in range(0, count): min = i for j in range(i + 1, count): if lists[min] > lists[j]: min = j lists[min], lists[i] = lists[i], lists[min] return lists
归并排序
def merge(left, right): i, j = 0, 0 result = [] while i < len(left) and j < len(right): if left[i] <= right[j]: result.append(left[i]) i += 1 else: result.append(right[j]) j += 1 result += left[i:] result += right[j:] return result def merge_sort(lists): # 归并排序 if len(lists) <= 1: return lists num = len(lists) / 2 left = merge_sort(lists[:num]) right = merge_sort(lists[num:]) return merge(left, right)
相关文章推荐
- 基于关系数据库系统链式存储的树型结构数据,求某结点下的子树所有结点算法(t-sql语言实现)
- 详解常用查找数据结构及算法(Python实现)
- 算法导论第二十五章-所有结点对的最短路径问题-Cpp代码实现
- c#实现猜数字算法,对所有CASE能在10步内求得其解
- pso-svm 算法实现(1):python DEAP
- K最近邻结点算法(k-Nearest Neighbor algorithm)KNN——python简单实现
- 求二叉树的所有结点之和,Python实现
- 剑指offer python实现 66道算法题
- 斐波那契数列的算法实现 —— python
- 数组全排列算法的python实现
- 数据挖掘 --- Python实现KNN算法项目-约会推荐算法
- 用Python实现随机森林算法,深度学习
- python实现整数分解为质数的算法
- python 实现周志华 机器学习书中 k-means 算法
- 朴素贝叶斯分类算法原理与Python实现与使用方法案例
- 数据结构与算法之动态规划算法及其python实现
- Python 实现完整的 RSA 算法
- python放大图片和画方格实现算法
- 反转字符串的所有方法-Python实现
- Python实现字符串匹配算法代码示例