递归

 def func(num):
if num / 2 > 0:
num -= 1
print(num)
num = func(num)
print('quit')
return num func(10)

  二分查找

 def binary_search(data_list,find_num):
mid_pos = int(len(data_list) / 2) # 计算需要查找数据的长度的一半
mid_val = data_list[mid_pos] # 获取中间位置的那个值
print(data_list) # 查看每次剩余筛选的数据列表
if len(data_list) > 0: # 当列表长度大于0时,则一直查找
if mid_val > find_num: # 如果中间的数比实际要查找的数大,那么这个数肯定在左边
print("%s should be in left of [%s]" % (find_num, mid_val))
binary_search(data_list[:mid_pos], find_num)
elif mid_val < find_num: # 如果中间的数比实际查找的数小,那么这个数肯定在右边
print("%s should be in right of [%s]" % (find_num, mid_val))
binary_search(data_list[mid_pos:], find_num)
else: # 如果中间数与实际查找的数恰巧相等,那么这个数肯定是要找的拿个数
print("Find %s" % find_num) else: # 否则就是买药这个数
print("cannot find [%s] in data_list" % find_num) if __name__ == '__main__':
primes = [1, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97]
binary_search(primes, 1) # 在列表里面查找1

二分查找二

 def binary_search(array, target):
"""
二分查找
前提是数组排序好的
先把中间值找出来
当中间元素大于查找的目标元素,则将左边的索引位置移动到中间位置的下一个位置
当中间元素小于查找的目标元素,则将右边的索引位置移动到中间位置的上一个位置
当中间元素等于查找的目标元素,则停止查找,返回目标元素位置
:param array:
:param target:
:return:
"""
left = 0
right = len(array) - 1
while left <= right:
mid_position = (left + right) // 2
if array[mid_position] == target:
return mid_position
elif target < array[mid_position]:
right = mid_position - 1
else:
left = mid_position + 1
return -1

  

多维数组交叉

 array = [[col for col in range(4)] for row in range(4)]  # 初始化一个4*4数组
# array=[[col for col in 'abcd'] for row in range(4)] for row in array: # 旋转前先看看数组长啥样
print(row) for i, row in enumerate(array): for index in range(i, len(row)):
tmp = array[index][i] # 将每一列数据在每一次遍历前,临时存储
array[index][i] = array[i][index] # 将每一次遍历行的值,赋值给交叉的列
print(tmp, array[i][index]) # = tmp
array[i][index] = tmp # 将之前保存的交叉列的值,赋值给交叉行的对应值
for r in array: # 打印每次交换后的值
print(r)

冒泡排序

 def bubble_sort(array):
"""
每次将后面的元素大于前面的元素交换位置
:param array:
:return:
"""
for i in range(len(array)):
for j in range(i + 1, len(array)):
if array[i] > array[j]:
array[i], array[j] = array[j], array[i]

插入排序

 def insert_sort(array):
"""
找出最小位置,然后替换
:param array:
:return:
"""
for i in range(len(array)):
key = array[i]
j = i - 1
while j >= 0 and array[j] > key:
array[j + 1] = array[j]
j -= 1
array[j + 1] = key

选择排序

 def select_sort(array):
"""
选则一个最小的位置,然后交换两个元素的位置
:param array:
:return:
"""
for i in range(len(array) - 1):
min_index = i
for j in range(i + 1, len(array)):
if array[j] < array[min_index]:
min_index = j
array[i], array[min_index] = array[min_index], array[i]

快速排序

def quick_sort(array):
"""
将一个数组分割为三份,一个为基数,一个是比基数大的列表,一个是比基数小的列表
然后再将比基数小的列表按照上面方式再分三份,直到分到不能再分位置
同样,也将比基数大的列表按上述分三份,直到不能再分为止
最后合并得到一个排序好的列表
:param array:
:return:
"""
if len(array) < 2:
return array
first_element = array[0]
left = [i for i in array[1:] if i <= first_element]
right = [i for i in array[1:] if i > first_element]
return quick_sort(left) + [first_element] + quick_sort(right)

快速排序二

 def partition(array, p, r):
x = array[r]
i = p - 1
for j in range(p, r):
if array[j] <= x:
i = i + 1
array[i], array[j] = array[j], array[i]
array[i + 1], array[r] = array[r], array[i + 1]
return i + 1 def quick_sort2(array, p, r):
if p < r:
q = partition(array, p, r)
quick_sort2(array, p, q - 1)
quick_sort2(array, q + 1, r)

斐波那契数列

 def fibonacci(n):
a, b = 0, 1
while n > 0:
yield b
a, b = b, a + b
n -= 1

阶乘

 def factorial(n):
"""
阶乘
1 * 2 * ... * n
直到n为1,则返回,然后合并相乘
:param n:
:return:
"""
# return n * factorial(n - 1) if n != 1 else n
result = 1
for i in range(1, n + 1):
result *= i
return result

线性搜索

 def line_search(array, target):
"""
线性查找
按照数组顺序,依次查找目标元素
:param array:
:param target:
:return:
"""
position = 0
while position < len(array):
if array[position] == target:
return position
position += 1
return -1

python算法——第四天的更多相关文章

  1. python算法题 python123网站单元四题目

    目录 一:二分法求平方根 二:Collatz猜想 三:算24(只考虑满足,不考虑把所有情况找出来)   下面向大家介绍几个python算法题. 一:二分法求平方根 1.题目要求为 2.输入输出格式为 ...

  2. python算法(一)

    python算法(一) 一.求数x的因子 x=100 divisors=()#初始化空的元组 for i in range(1,x): if x%i==0: divisors=divisors+(i, ...

  3. 安装Python算法库

    安装Python算法库 主要包括用NumPy和SciPy来处理数据,用Matplotlib来实现数据可视化.为了适应处理大规模数据的需求,python在此基础上开发了Scikit-Learn机器学习算 ...

  4. 数据结构与算法JavaScript (四) 串(BF)

    串是由零个或多个字符组成的有限序列,又叫做字符串 串的逻辑结构和线性表很相似的,不同的是串针对是是字符集,所以在操作上与线性表还是有很大区别的.线性表更关注的是单个元素的操作CURD,串则是关注查找子 ...

  5. 算法第四版 在Eclipse中调用Algs4库

    首先下载Eclipse,我选择的是Eclipse IDE for Java Developers64位版本,下载下来之后解压缩到喜欢的位置然后双击Eclipse.exe启动 然后开始新建项目,File ...

  6. Python 基础语法(四)

    Python 基础语法(四) --------------------------------------------接 Python 基础语法(三)------------------------- ...

  7. 初学 Python(十四)——生成器

    初学 Python(十四)--生成器 初学 Python,主要整理一些学习到的知识点,这次是生成器. # -*- coding:utf-8 -*- ''''' 生成式的作用: 减少内存占有,不用一次性 ...

  8. Python第二十四天 binascii模块

    Python第二十四天 binascii模块 binascii用来进行进制和字符串之间的转换 import binascii s = 'abcde' h = binascii.b2a_hex(s) # ...

  9. java排序算法(四):冒泡排序

    java排序算法(四):冒泡排序 冒泡排序是计算机的一种排序方法,它的时间复杂度是o(n^2),虽然不及堆排序.快速排序o(nlogn,底数为2).但是有两个优点 1.编程复杂度很低.很容易写出代码 ...

随机推荐

  1. C# SMTP邮件发送 分类: C# 2014-07-13 19:10 334人阅读 评论(1) 收藏

    邮件发送在网站应用程序中经常会用到,包括您现在看到的博客,在添加评论后,系统会自动发送邮件通知到我邮箱的,把系统发送邮件的功能整理了下,做了一个客户端Demo,希望对有需要的童鞋有所帮助: 核心代码: ...

  2. hdu 4041 2011北京赛区网络赛B 搜索 ***

    直接在字符串上搜索,注意逗号的处理 #include<cstdio> #include<iostream> #include<algorithm> #include ...

  3. 配置ogg异构oracle-mysql(3)目的端配置

    目的端配置大致分为如下三个步骤:配置mgr,配置checkpoint table,配置应用进程 在目的端先创建一张表,记得带主键: mysql> create database hr;Query ...

  4. 使用Jmeter进行http接口性能测试

    在进行网页或应用程序后台接口开发时,一般要及时测试开发的接口能否正确接收和返回数据,对于单次测试,Postman插件是个不错的Http请求模拟工具. 但是Postman只能模拟单客户端的单次请求,而对 ...

  5. 库函数系统调用文件方式,王明学learn

    库函数系统调用文件方式 基于C函数库的文件编程是独立于具体的操作系统平台的,不管是在Windows.Linux还是其他的操作系统中,都是使用这些函数.使用库函数进行程序设计可提高程序的可移植性. 对于 ...

  6. javase基础笔记1——简介和发展

    软件分为 系统软件 windows linux类 (unix)mac(麦金塔).数据库管理系统 unix linux 开源os(open source) 免费 开放 free os operation ...

  7. LaTex学习笔记(一)

    1. 语法 命令 普通命令 环境 数据 注释 2. 物理结构 导言 指定文档类型,引入宏包,定义命令,环境等 \documentclass[options]{class} \usepackage[op ...

  8. 【项目总结】之——JS分割字符串

    背景: 在我们做那个招标项目的时候,由于是刚刚接触到这个BS东西,我基本上是什么也不会.可是当时组长浩哥给过我一个任务,就是叫我将数据里面以字符串形式存在的信息切割开,然后显示到前台上去.当时对于浩哥 ...

  9. Liferay 6.2 改造系列之九:修改用户信息填写规则

    为了让用户信息更贴近实际需求,修改如下信息: 1.让登录名可以使用数字.“.”.“_”等 在/portal-master/portal-impl/src/portal.properties文件中,有如 ...

  10. hdu1010 dfs+奇偶性减枝

    Tempter of the Bone Problem Description The doggie found a bone in an ancient maze, which fascinated ...