python快速排序
时间:2022-07-23
本文章向大家介绍python快速排序,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
python小程序
//
晚上没事儿干,用python写了个快排小程序,分享出来看看:
快速排序:
#! /usr/bin/env python
# -*- coding:utf8 -*-
from random import randrange, shuffle
'''
基本思想:
通过一趟排序将要排序的数据分割成独立的两部分:分割点左边都是比它小的数,右边都是比它大的数。
基本流程:通过一趟排序将要排序的数据分割成独立的两部分,
其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,
整个排序过程可以递归进行,以此达到整个数据变成有序序列。
稳定性:不稳定
复杂度:在最坏情况下是O(N^2),平均的时间复杂度是O(N*lgN)
'''
# 自动生成list
def generate_array():
array = []
while len(array) < 12:
array.append(randrange(0, 101, 3))
print("before sort array is {}".format(array))
shuffle(array)
return array
def quick_sort(array, head, tail):
# 如果head > tail 则直接返回
if head >= tail:
return array
# 否则进行排序
else:
start, end = head, tail
base = array[start] # 设置基准数为左侧数字
while start < end:
# 从右边开始判断,如果列表右边的数比基准数大或者相等
while start < end and array[end] >= base:
end = end-1 # 不进行操作,将end向前移动一位
# 如果找到不满足条件的数字,则把end的数字复制给start
array[start] = array[end]
# 同样的方法比较前半区
while start < end and array[start] <= base:
start = start+1
array[end] = array[start]
# 这轮比较做完之后,列表被分成了两个半区,此时start=end
array[start] = base # 或者array[end]=base也可以
print("middle result is {0},base is {1}".format(array, base))
quick_sort(array, head, start-1)
quick_sort(array, start+1, tail)
return array
arr = generate_array()
result = quick_sort(arr, 0, len(arr)-1)
print("after sort is {}".format(result))
输出结果如下,其中base是每一次交换使用的基准数字:
before sort array is [96, 6, 63, 63, 51, 75, 63, 12, 0, 39, 33, 0]
middle result is [12, 6, 63, 39, 33, 0, 63, 0, 51, 63, 96, 75],base is 63
middle result is [0, 6, 0, 12, 33, 39, 63, 63, 51, 63, 96, 75],base is 12
middle result is [0, 6, 0, 12, 33, 39, 63, 63, 51, 63, 96, 75],base is 0
middle result is [0, 0, 6, 12, 33, 39, 63, 63, 51, 63, 96, 75],base is 6
middle result is [0, 0, 6, 12, 33, 39, 63, 63, 51, 63, 96, 75],base is 33
middle result is [0, 0, 6, 12, 33, 39, 63, 63, 51, 63, 96, 75],base is 39
middle result is [0, 0, 6, 12, 33, 39, 51, 63, 63, 63, 96, 75],base is 63
middle result is [0, 0, 6, 12, 33, 39, 51, 63, 63, 63, 96, 75],base is 51
middle result is [0, 0, 6, 12, 33, 39, 51, 63, 63, 63, 75, 96],base is 96
after sort is [0, 0, 6, 12, 33, 39, 51, 63, 63, 63, 75, 96]
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- java的内部类和静态内部类(嵌套类)
- python爬取B站视频弹幕分析并制作词云
- mybatis扩展之自定义类型处理器处理枚举类型
- IMDB影评数据集预处理(使用word2vec)
- 【leetCode】使用两个栈搞一个队列day05
- bert训练代码
- mybatis文件映射之自定义返回结果集
- maven之第一个maven程序
- 【LeetCode】重建二叉树day04
- 【LeetCode】从尾到头反过来返回每个节点的值(用数组返回)day03
- mybatis文件映射之利用association进行关联查询(二)
- 【JUC】CountDownLatch你真的了解吗?
- mybatis动态sql之foreach补充(一)
- 【LeetCode】把字符串 s 中的每个空格替换成““%20””day02
- bert加载数据代码