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. geth 基本使用

    概要 geth 是以太坊的官方 golang 客户端. 通过 geth 的使用可以直观的了解以太坊, 乃至区块链的运作. 下面, 通过 geth 来构造一次搭建私链, 创建账户, 挖矿, 交易的流程. ...

  2. 被“org.springframework.boot.web.support.SpringBootServletInitializer;”耽搁的两天

    org.springframework.boot.web.support.SpringBootServletInitializer 改为: org.springframework.boot.conte ...

  3. 物联网架构成长之路(43)-k8s从入门到放弃

    0. 前言 这段时间要入门一下CI/CD了,以前简单的了解过Jenkins,现在要把以下的这个图的架构搭建起来.国外可能一两个命令就安装完成的事情,我折腾了2天多,真的差点放弃了. 1. 安装Virt ...

  4. Image-transpose

    import Image im=Image.open('test.jpg') #out = im.resize((128, 128),Image.BILINEAR) #改变大小 #out = im.r ...

  5. tsconfig.json配置项详解

    { "compilerOptions": { "allowUnreachableCode": true, // 不报告执行不到的代码错误. "allo ...

  6. MySQL5.6升级到5.7详细教程

    前言:最近看了下系统的数据库是5.6的,想着升级到5.7,特此记录 一.官网下载MySQL5.7rpm包(4个) 进入MySQL community download页面,默认是MySQL最新版8.0 ...

  7. ssh-agent的作用

    明明在github上配置了ssh公钥,拉代码时却报错: sign_and_send_pubkey: signing failed: agent refused operation 解决方法:在~/.z ...

  8. 手写instanceof (详解原型链) 和 实现绑定解绑和派发的事件类

    A  instanceof  B    是判断  A  是否继承自B,是返回true,  否返回false 再精确点就是判断B   是否  再  A  的 原型链上, 什么是原型链,举个例子: 我们定 ...

  9. c# 拉姆达表达式实现List去重

    c# 拉姆达表达式实现List去重 var list = studentlist.OrderByDescending(a => a.CreateDate).ToList(); Console.W ...

  10. 第24课经典问题(中)-----关于const对象的疑问

    关于const对象的疑问const关键字能否修饰类的对象?如果可以,有什么特性?const关键字能够修饰对象const修饰的对象为只读对象只读对象的成员变量不允许被改变.(对象是只读的,成员变量不允许 ...