1、排序

  • 从小到大排序:sorted(list)
  • 从大到小排序:sorted(list, reverse=True)
  • sort() 方法,改变原有数组的顺序
  • sort(reverse=True)
#!/bin/Python
alist = [1, 4, 2, 3, 7, 6]
print(sorted(alist))
print(sorted(alist, reverse=True))
alist.sort()
print(alist)
alist.sort(reverse=True)
print(alist)

2、冒泡

  • 1.比较相邻的元素,如果第一个比第二个大,就交换
  • 2.一轮遍历,每两个相邻的元素,重复第 1 步,最大的放队尾
  • 3.不包括已经排队尾的,重复第 2 步
#!/bin/Python
# -*- coding: UTF-8 -*-
#冒泡排序
def bubble_sort(lists):
#获取数组长度
count = len(lists) - 1
#N个元素遍历N次
for index in range(count, 0, -1):
#第i个和i+1个依次对比
for sub_index in range(index):
#大的元素冒上去
if lists[sub_index] > lists[sub_index + 1]:
lists[sub_index], lists[sub_index + 1] = lists[sub_index + 1], lists[sub_index]
return lists
alist = [1, 4, 2, 3, 7, 6]
print(bubble_sort(alist))

3、快排

  • 1.从列表中挑出一个元素,作为基准值 key
  • 2.所有小于 key 的元素放左边,所有大于 key 的元素放右边
  • 3.分别递归左侧列表,右侧列表
#!/bin/Python
# -*- coding: UTF-8 -*- #快速排序
def quick_sort(lists, left, right):
#递归过程中,发现left和right一致时,停止递归,直接返回列表
if left >= right:
return lists
#定义游标
low = left
high = right #取参考标志,最左边的元素
key = lists[low]
while low < high:
#从最右侧向左,依次和标志元素对比,如果右侧的元素大于等于标志元素
while low < high and lists[high] >= key:
#右侧减1
high -= 1
#如果右侧的元素小于标志元素,则low赋high值
lists[low] = lists[high] #从最左侧向右,依次和标志元素对比,如果左侧的元素小于等于标志元素
while low < high and lists[low] <= key:
#左侧加1
low += 1
#如果左侧的元素大于标志元素,则high赋low值
lists[high] = lists[low] #最后给high位置赋值
lists[high] = key #处理左侧元素
quick_sort(lists, left, low - 1)
#处理右侧元素
quick_sort(lists, low + 1, right)
return lists alist = [0, 10, 88, 19, 9, 1, 7]
print(quick_sort(alist, 0, 6))

4、堆排序

  • 堆排序指利用堆的数据结构设计的一种排序算法
  • 堆近似于一个完全二叉树结构
  • 子节点的键值小于(或者大于)它的父节点
#!/bin/Python
# -*- coding: UTF-8 -*- #堆排序
def heap_sort(lst):
def sift_down(start, end):
"""最大堆调整"""
root = start
print "root %d start %d end %d" % (root, start, end)
while True:
child = 2 * root + 1
#print "child index: %d" % child #终止条件,孩子的索引值超过数组最大长度
if child > end:
break
#print "lst child value: %d" % lst[child] #确定最大的孩子节点的索引值
if child + 1 <= end and lst[child] < lst[child + 1]:
child += 1
#print "child+1 index: %d" % child #孩子节点最大值和根节点交换
if lst[root] < lst[child]:
lst[root], lst[child] = lst[child], lst[root]
#print "lstroot %d" %d lst[root], "lstchild %d" % lst[child]
root = child
#print "root %d" % root
else:
break print("---------------创建最大堆---------------")
#创建最大堆
print(xrange((len(lst) - 2) // 2, -1, -1))
for start in xrange((len(lst) - 2) // 2, -1, -1):
print "---->Loop start %d" % start
sift_down(start, len(lst) - 1)
print(lst) print("---------------排序过程---------------")
#堆排序
for end in xrange(len(lst) - 1, 0, -1):
#首尾交换
lst[0], lst[end] = lst[end], lst[0]
#剩余重新堆排序
sift_down(0, end - 1)
print(lst)
return lst alist = [70, 60, 12, 40, 30, 8, 10]
print(heap_sort(alist))

5、二分查找

  • 二分查找又称折半查找
  • 必须采用顺序存储结构
  • 必须按关键字大小有序排列
#!/bin/Python
# -*- coding: UTF-8 -*- #二分查找
#原始数组
alist = [0, 1, 10, 88, 19, 9, 1] def binary_search(arr, start, end, hkey):
if start > end:
#返回-1,表示程序出现异常
return -1
#先找到数组索引的中间值
mid = start + (end - start) / 2
#如果中间值大于查找的值,则从中间值左边的数组中查找
if arr[mid] > hkey:
return binary_search(arr, start, mid - 1, hkey)
#如果中间值小于查找的值,则从中间值右边的数组中查找
if arr[mid] < hkey:
return binary_search(arr, mid + 1, end, hkey)
#返回查找的值所在的索引值
return mid #给数组排序
alist = sorted(alist)
#打印出排序后的数组
print(alist)
#执行程序
print binary_search(alist, 0, 6, 9)

6、素数

  • 素数又称质数
  • 0,1 不是素数
  • 除了 1 和它本身外,不能被其他自然数整除的数
#!/bin/Python
# -*- coding: UTF-8 -*- #素数
def is_prime(n):
#0,1 不是素数
if n <= 1:
return False #除了 1 和它本身外,不能被其他自然数整除的数
for i in range(2, n):
if n % i == 0:
return False
return True for i in range(0, 100):
if is_prime(i):
print i

欢迎关注微信公众号"测试开发Stack"

测开面试 | Python常问算法的更多相关文章

  1. 测开面试 | Python语言常见问题

    1.面向对象的概念? 面向对象编程,简称OOP,是一种程序设计思想 主要包括:类.继承.多态(子类方法覆盖父类方法).实例.属性.方法 2.什么是进程.线程.协程? 进程:独立数据空间,进程间不共享数 ...

  2. 测开之Python自动化全栈工程师+性能专项(送思维导图)

    测开之Python自动化全栈工程师+性能专项 功能测试基础 接口测试基础接口的通信原理与本质cookie.session.token详解接口测试的意义与测试方法接口测试用例的设计 app测试 app流 ...

  3. 【搞定 Java 并发面试】面试最常问的 Java 并发进阶常见面试题总结!

    本文为 SnailClimb 的原创,目前已经收录自我开源的 JavaGuide 中(61.5 k Star![Java学习+面试指南] 一份涵盖大部分Java程序员所需要掌握的核心知识.觉得内容不错 ...

  4. 面试中常问的List去重问题,你都答对了吗?

    面试中经常被问到的list如何去重,用来考察你对list数据结构,以及相关方法的掌握,体现你的java基础学的是否牢固. 我们大家都知道,set集合的特点就是没有重复的元素.如果集合中的数据类型是基本 ...

  5. Android相关面试题---面试官常问问题

    版权声明:本文为寻梦-finddreams原创文章,请关注: http://blog.csdn.net/finddreams/article/details/44513579 一般的面试流程是笔试完就 ...

  6. 【搞定 Java 并发面试】面试最常问的 Java 并发基础常见面试题总结!

    本文为 SnailClimb 的原创,目前已经收录自我开源的 JavaGuide 中(61.5 k Star![Java学习+面试指南] 一份涵盖大部分Java程序员所需要掌握的核心知识.欢迎 Sta ...

  7. Java面试中常问的数据库方面问题

    MySQL 为什么用自增列作为主键 如果我们定义了主键(PRIMARY KEY),那么InnoDB会选择主键作为聚集索引.如果没有显式定义主键,则InnoDB会选择第一个不包含有NULL值的唯一索引作 ...

  8. 面试--hr常问的问题

    程序员换工作,会有技术面试(可能不止一轮的技术面),还会有hr的面试,技术面主要是偏向于技术问题,hr面试主要问的一些问题,下面做下汇总: 1.你换工作的原因,你为何辞职 必问的问题,送分题或者送命题 ...

  9. 聊聊面试中常问的GC机制

    GC 中文直译垃圾回收,是一种回收内存空间避免内存泄漏的机制.当 JVM 内存紧张,通过执行 GC 有效回收内存,转而分配给新对象从而实现内存的再利用. JVM GC 机制虽然无需开发主动参与,减轻不 ...

随机推荐

  1. 记一次Lua语言中死循环查错

    前言 如果在Lua语言中某一处死循环了!你特么的怎么去查出这特么的该死的循环到底在特么的哪里!!! 重现步骤 一打开技能界面,整个游戏就卡死不动了 开始排查 查看一下cpu占用率,unity占用60% ...

  2. Python连载36-线程数量限制、Timer、可重入锁

    一.允许一个资源最多由几个线程同时进行 命令行:threading.Semaphore(个数) 代表现在最多有几个线程可以进行操作 import threading import time #参数定义 ...

  3. torch_13_自定义数据集实战

    1.将图片的路径和标签写入csv文件并实现读取 # 创建一个文件,包含image,存放方式:label pokemeon\\mew\\0001.jpg,0 def load_csv(self,file ...

  4. torch_11_风格迁移和cycleGAN

    1,A Neural Algorithm of atistic Style https://axiv.org/pdf/1508.06576.pdf 如何定义图片的内容,风格: 定义内容:在vggnet ...

  5. oracle使用sequence批量写数据

    本博客是对之前写的博客Oracle批量新增更新数据的补充,oracle的知识真是多,其实要学精任何一门知识都是要花大量时间的,正所谓: 学如逆水行舟,不进则退 先介绍oracle sequence的一 ...

  6. HTML+css基础 css的几种形式

    1.行间样式:将style写在标签内的充当标签标签属性 2.行内样式

  7. Knative 基本功能深入剖析:Knative Serving 自动扩缩容 Autoscaler

    Knative Serving 默认情况下,提供了开箱即用的快速.基于请求的自动扩缩容功能 - Knative Pod Autoscaler(KPA).下面带你体验如何在 Knative 中玩转 Au ...

  8. Redhat6.6替换Centos Yum源

    1.删除当前系统自带的yum [root@reddhat6_155_201 ~]# rpm -qa |grep yum yum-rhn-plugin--.el6.noarch yum-utils--. ...

  9. ASP.NET Core 进程外(out-of-process)托管

    ASP.NET Core 进程外(out-of-process)托管 在本节中,我们将讨论 ASP.NET Core 中的Out Of Process Hosting. ASP.NET Core 进程 ...

  10. mysql只显示表名和备注

    查看某个数据下的表及其备注: select table_name,table_comment from information_schema.tables where table_schema='db ...