《算法基础》所有算法的Python实现
来源:互联网 发布:javascript怎么开启 编辑:程序博客网 时间:2024/05/16 05:11
写这篇文章并不是面向读者的,主要就是当记笔记。
我的编程基础太烂,我之前想我以后要搞工程,也不搞ACM,所以一直没有重视算法。但是现在想来,之前的想法就实在可笑了。算法基础不行,不论是搞工程还是搞学术,都太容易触碰到自己的天花板。一句话:目光短浅!
现在打算每天晚上花1~2个小时用在算法上。看算法书或在网上刷题。
由于个人能力尚且太浅,如果真的有人看我下面的代码的话,还请多多指教!
为了比较性能,我写了个用于函数计时的装饰器:
import timefrom functools import wrapsdef 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)
@ftimerdef linear_search(A,n,x): ans='NOT_FOUND' for i in range(n): if A[i]==x: ans=i+1 return ansnums=[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)
@ftimerdef linear_search(A,n,x): ans='NOT_FOUND' for i in range(n): if A[i]==x: ans=i+1 break return ansnums=[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)
@ftimerdef 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 resultdef 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)
阅读全文
0 0
- 《算法基础》所有算法的Python实现
- 基础算法的Python实现
- Python 算法基础 排序实现
- 【Python】Python基础排序算法实现
- 基础机器学习算法Python实现
- 算法导论详解(1) 第二章算法基础+python实现
- C#实现所有经典的排序算法
- 图的所有简单算法实现
- 算法实现:字符串的所有排列情况
- 算法基础——十种常用排序算法的Java及Python实现
- Apriori算法的Python实现!
- TEA 算法的 Python 实现
- RSA算法的python实现
- rsa算法的python实现
- LCS算法的python实现
- EM 算法的 Python 实现
- ID3算法的python实现
- KNN算法的Python实现
- (转)量子位:这个AI股神把顶级对冲基金吓尿了
- DOM操作:创建、添加、移除、移动、和查找
- PHP微信开发(测试号)-建立链接
- 支持向量机的通俗解释
- 普通红包算法(均分)
- 《算法基础》所有算法的Python实现
- 汉字编码,GB2312、GB 13000、GBK、GB18030 介绍
- TFTLCD原理与驱动与指令介绍
- 小红书2018编程_翻转字符串
- 掌握Linux命令
- OpenWrt源码分析之netifd
- Pandas基础复习-DataFrame
- STM32学习笔记——TFT2.4彩屏显示图片
- LeetCode 0038