递归

 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. shell test 數值 字符串 文件比較

    數值比較 描述 n1 –eq n2 等於 n1 –gt  n2 大於 n1 –ge n2 大於等於 n1 –lt  n2 小於 n1 –le n2 小於等於 n1 –ne n2 不等於   字符串比較 ...

  2. <转>WCF中出现死锁或者超时

    WCF回调中的死锁 一.服务器端死锁 对于如下服务: [ServiceContract(CallbackContract = typeof(INotify))] public class Downlo ...

  3. 物化视图刷新慢--有可能是mv log被多个mv使用造成的

    同事说物化视图刷新慢,经检生产环境,发现部分物化视图刷新慢的原因是:由于同一个物化视图日志(mv log)被多个物化视图(mv)使用,不同的物化视图(mv)使用不同的刷新间隔,导致物化视图日志(mv ...

  4. java thread run and start

    在java中继承Thread,线程启动有两中方法:start()和run().下面简单介绍一下两者的区别. start():启动一个线程,此时线程处于就绪状态,然后调用Thread对象的run()方法 ...

  5. BRIEF 特征描述子

    Binary Robust Independent Elementary Features www.cnblogs.com/ronny 1. BRIEF的基本原理 我们已经知道SIFT特征采用了128 ...

  6. java杂记——数组拷贝

    这里介绍两种java提供的数组拷贝方法: (1)Arrays提供的copyOf(T src, T desLength)和copyOfRange(T src, int from, int to) (2) ...

  7. r0遍历系统进程方法总结

    方法1: ZwQuerySystemInformation 这个方法网上一搜一大堆,不举例了 方法2:暴力枚举PID枚举进程,代码: NTSTATUS DriverEntry(PDRIVER_OBJE ...

  8. sidt十六进制代码

    00121453 0F010D 40441200 sidt fword ptr ds:[gliu]0012145A 0F014D B0 sidt fword ptr ss:[ebp-0x50]0012 ...

  9. Redis学习笔记(1) Redis介绍及基础

    1. Redis的特性 (1) 存储结构 Redis(Remote Dictionary Server,远程字典服务器)是以字典结构存储数据,并允许其他应用通过TCP协议读写字典中的内容.Redis支 ...

  10. UNIX索引技术访问文件初阶

    背景: 软考里面,多次碰到一道题: 过程 以前对于这样的题,仅仅知道: 在文件系统中,文件的存储设备通常划分为若干个大小相等的物理块,每块长为512或1024字节.文件的理结构是指文件在存储设备上的存 ...