python 实现快速排序(面试经常问到)
# -*- coding: UTF-8 -*-
# 递归实现, 把过程打印出来便于理解
def quick_sort1(lis, start, end):
    if start >= end:
        return
    lf = start
    rg = end
    base = lis[lf]
    while lf < rg:
        while lf < rg and lis[rg] <= base:
            rg -= 1
        lis[lf] = lis[rg]
        print("while1", lis)
        while lf < rg and lis[lf] > base:
            lf += 1
        lis[rg] = lis[lf]
        print("while2", lis)
    lis[lf] = base
    print(lis)
    quick_sort1(lis, rg+1, end)
    quick_sort1(lis, start, lf - 1)
def quick_sort2(array, l, r):
    if l < r:
        q = partition(array, l, r)
        quick_sort2(array, l, q - 1)
        quick_sort2(array, q + 1, r)
def partition(array, l, r):
    x = array[r]
    i = l - 1
    for j in range(l, r):
        if array[j] <= x:
            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_sort3(array, l, r):
  if l >= r:
    return
  stack = []
  stack.append(l)
  stack.append(r)
  while stack:
    low = stack.pop(0)
    high = stack.pop(0)
    if high - low <= 0:
      continue
    x = array[high]
    i = low - 1
    for j in range(low, high):
      if array[j] <= x:
        i += 1
        array[i], array[j] = array[j], array[i]
    array[i + 1], array[high] = array[high], array[i + 1]
    stack.extend([low, i, i + 2, high])
if __name__ == "__main__":
    # lis1 = [6, 4, 3, 5, 2, 1, 7, 8, 9]
    lis = [6, 3, 5, 2, 1, 7, 8, 9, 4]
    print("start....")
    quick_sort3(lis, 0, len(lis)-1)
    print(lis)
    print("end...")
python 实现快速排序(面试经常问到)的更多相关文章
- python基础之面试常问
		目录 python相对其他语言有什么特点? python内存管理机制,gc机制的了解,gc回收三种算法. lambda函数 高级函数 map.reduce.filter.sorted等. 简述六种基本 ... 
- 【PHP面试题】通俗易懂的两个面试必问的排序算法讲解:冒泡排序和快速排序
		又到了金三银四找工作的时间,相信很多开发者都在找工作或者准备着找工作了.一般应对面试,我们无可厚非的去刷下面试题.对于PHPer来说,除了要熟悉自己所做的项目,还有懂的基本的算法.下面来分享下PHP面 ... 
- 【面试必问】python实例方法、类方法@classmethod、静态方法@staticmethod和属性方法@property区别
		[面试必问]python实例方法.类方法@classmethod.静态方法@staticmethod和属性方法@property区别 1.#类方法@classmethod,只能访问类变量,不能访问实例 ... 
- python笔记39-unittest框架如何将上个接口的返回结果给下个接口适用(面试必问)
		前言 面试必问:如何将上个接口的返回结果,作为下个接口的请求入参?使用unittest框架写用例时,如何将用例a的结果,给用例b使用. unittest框架的每个用例都是独立的,测试数据共享的话,需设 ... 
- 高级测试工程师面试必问面试基础整理——python基础(一)(首发公众号:子安之路)
		现在深圳市场行情,高级测试工程师因为都需要对编程语言有较高的要求,但是大部分又没有python笔试机试题,所以面试必问python基础,这里我整理一下python基本概念,陆续收集到面试中python ... 
- Python面试常问的10个问题
		很多人想找Python工作,面试往往在基础知识点采坑了 Python是个非常受欢迎的编程语言,随着近些年机器学习.云计算等技术的发展,Python的职位需求越来越高.下面我收集了10个Python面试 ... 
- 美女面试官问我Python如何优雅的创建临时文件,我的回答....
		[摘要] 本故事纯属虚构,如有巧合,他们故事里的美女面试官也肯定没有我的美,请自行脑补... 小P像多数Python自学者一样,苦心钻研小半年,一朝出师投简历. 这不,一家招聘初级Python开发工程 ... 
- 面试常问的几个排序和查找算法,PHP实现
		冒泡,快排,二分查找,都是面试常问的几个算法题目,虽然简单,但是一段时间不用的话就很容易忘记,这里我用PHP实现了一下,温故而知新. 排序 冒泡排序 每一次冒出一个最大的值 function bubb ... 
- 绿盟python测试实习面试
		1.简历问题 低级错误:时间写错 最近好像越来越马大哈了,总是犯低级错误. 上次的开题报告首页,这次的时间,每次都有小问题,确是大毛病 到底哪里出错了 2 RHCE证书好像没有用 面试官根本就不懂这个 ... 
随机推荐
- The backup set holds a backup of a database other than the existing ‘dbName’ database
			 [Solved] System.Data.SqlClient.SqlError: The backup set holds a backup of a database other than t ... 
- Storage Port Drivers
			为了学习存储知识,我也是拼了,来,翻译一下下面这篇微软的文章(如果有谁翻译过了,或者微软有中文翻译,请绕路): Storage Port Drivers Last Updated: 4/20/2017 ... 
- Java基础系列 - try...catch...finally
			package com.test6; import java.io.FileReader; import java.io.IOException; /** * try...catch...finall ... 
- (转载):nmon使用
			转:http://www.cnblogs.com/mululu/p/6398483.html 博客园 首页 新随笔 联系 管理 订阅 随笔- 76 文章- 1 评论- 2 Nmon的安装及使用 ... 
- 深入理解WebRTC
			Web Real-Time Communication(Web实时通信,WebRTC)由一组标准.协议和JavaScript API组成,用于实现浏览器之间(端到端)的音频.视频及数据共享. WebR ... 
- Mysql之数据库设计规范
			1. 三大范式首先要明白”范式(NF)”是什么意思.按照教材中的定义,范式是“符合某一种级别的关系模式的集合,表示一个关系内部各属性之间的联系的合理化程度”.数据库范式也分为1NF,2NF,3NF,B ... 
- IO流——常用IO流详解
			1:字节流 字节流:用于处理以字节为单位的二进制文件(如音乐,图片等) InputStream 是抽象类 它的对应子类FileInputStream可以被实例化 构造方法: FileInputStre ... 
- Nginx之web服务器
			Nginx的介绍 Nginx是由俄罗斯的Igor Sysoev使用C语言开发的轻量级.高性能.开源.跨平台的Web服务器. Nginx使用基于事件驱动的架构能够并发处理百万级的TCP连接,高模块化的设 ... 
- Cesium入门-1-展示一个地球
			Cesium 官网教程地址 https://cesium.com/docs/tutorials/getting-started//tutorials/getting-started/ 第一个程序代码: ... 
- apache配置https重定向
			apache配置https重定向 一.总结 一句话总结: 网上找不到答案的原因是因为没有精准的描述问题,没有把问题描述清楚:尽量把关键词描述清楚 1.apache将80端口重定向443的具体步骤(在 ... 
