快速排序(Python实现)

一、算法介绍快速排序是经常考查到的排序算法,这里对快排算法做一下总结。快速排序是“交换”类的排序,它通过多次划分操作实现排序!以升序为例,其执行流程可以概括为:每一趟排序选择当前所有子序列的一个关键字(通常是第一个)作为枢轴量,将子序列中比枢轴量小的移到枢轴前边,比枢轴大的移到枢轴后边,具体过程是一个交替扫描和交换的过程。当本趟所有子序列都被枢轴以上述规则划分完毕后会得到新的一组更短的子序列,…

大家好,又见面了,我是你们的朋友全栈君。

一、 算法介绍
快速排序是经常考查到的排序算法,这里对快排算法做一下总结。快速排序是“交换”类的排序,它通过多次划分操作实现排序!以升序为例,其执行流程可以概括为:每一趟排序选择当前所有子序列的一个关键字(通常是第一个)作为枢轴量,将子序列中比枢轴量小的移到枢轴前边,比枢轴大的移到枢轴后边,具体过程是一个交替扫描和交换的过程。当本趟所有子序列都被枢轴以上述规则划分完毕后会得到新的一组更短的子序列,它们会成为下一趟划分的初始序列集。
二、演示流程
在这里插入图片描述
在这里插入图片描述
三、 Python代码实现

def quick_sort(nums: list, left: int, right: int) -> None:
	if left < right:
		i = left
		j = right
		# 取第一个元素为枢轴量
		pivot = nums[left]
		while i != j:
			# 交替扫描和交换
			# 从右往左找到第一个比枢轴量小的元素,交换位置
			while j > i and nums[j] > pivot:
				j -= 1
			if j > i:
				# 如果找到了,进行元素交换
				nums[i] = nums[j]
				i += 1
			# 从左往右找到第一个比枢轴量大的元素,交换位置
			while i < j and nums[i] < pivot:
				i += 1
			if i < j:
				nums[j] = nums[i]
				j -= 1
		# 至此完成一趟快速排序,枢轴量的位置已经确定好了,就在i位置上(i和j)值相等
		nums[i] = pivot
		# 以i为枢轴进行子序列元素交换
		quick_sort(nums, left, i-1)
		quick_sort(nums, i+1, right)		


# 测试代码
import random

data = [random.randint(-100, 100) for _ in range(10)]
quick_sort(data, 0, len(data) - 1)
print(data)

四、性能分析

  1. 时间复杂度分析
    快速排序最好情况下的时间复杂度为O(nlog2n),待排序列越接近无序,本算法效率越高,最坏情况下时间复杂度为O(n2)(序列已经有序的状态),待排序列越接近有序,本算法效率越低,平均时间复杂度为O(nlog2n)。快速排序的排序趟数和初始序列有关!

有多个时间复杂度为O(nlog2n)的排序算法,但这里称之为快速排序算法而不是其他排序,是因为其他排序算法的基本操作执行次数的多项式最高项为X*nlog2,X为系数,快速排序的X最小,可见它在最高级别的算法中是最好的,故叫快速排序。

  1. 空间复杂度分析
    空间复杂度为O(log2n),快速排序是递归进行的,需要栈的辅助!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/126023.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • vue-cli构建vue项目

    vue-cli构建vue项目

    2022年3月12日
    64
  • 有名的博客网站「建议收藏」

    有名的博客网站「建议收藏」 根据自身特殊的定位和客户群,不同的网站有着不同的表现手法,所强调的功能和服务也有很大的区别,有的是独立托管网站,有的依附于门户或专业、行业网站,这种多样化的博客托管形成丰富多彩的博客内容和广泛的接触面及影响力,多样化产生了精彩,而这正是值得我们去深入研究并借鉴的地方。下文的点评即是基于大众对各博客托管网站的认识,力求从客观公正的角度加以整体分析。No.1:博客网——http://

    2022年7月12日
    13
  • matlab 自动保存图片_matlab保存图像

    matlab 自动保存图片_matlab保存图像最近在写毕业论文,需要保存一些高分辨率的图片.下面介绍几种MATLAB保存图片的方式.一.直接使用MATLAB的保存按键来保存成各种格式的图片你可以选择保存成各种格式的图片,实际上对于一般的图片要求而言,该方法已经足够了.二.使用saveas函数该函数实际上类似于“另存为”的选项,并且忽略图片的背景大小等等,按照默认的属性存储.一般格式为为saveas(fig,filen…

    2022年9月12日
    0
  • vagrant up 时提示错误 cound not open file

    vagrant up 时提示错误 cound not open file

    2021年10月28日
    39
  • java孙鑫老师视频教程笔记「建议收藏」

    java孙鑫老师视频教程笔记「建议收藏」此笔记是我开始系统学习java孙鑫老师视频教程的笔记。可供初学者学习参考哈 今天先附上第一课Java的一些基本概念第二课Java面向对象编程后面的将陆续为大家奉上 但是如果你是初学者的话,我笔记里边可能有些东西只是点了一下,没有再详尽的描述了那是因为我以前学过一段java,有一定java基础,所以如果你需要这部分更的详细讲解的话还是得麻烦你自己在网上搜一

    2022年5月17日
    30
  • URL 规范 整理

    URL 规范 整理

    2022年3月5日
    50

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号