首页 > 编程语言 >基本算法模板之快速排序

基本算法模板之快速排序

时间:2023-03-16 19:14:23浏览次数:39  
标签:数列 基准值 int while 算法 排序 模板

快速排序

1.算法描述

  • 从数列中挑出一个元素,称为 "基准";
  • 重新排序数列,所有元素比基准值小的摆放在基准前面,所有元素比基准值大的摆在基准的后面(相同的数可以到任一边)。在这个分区退出之后,该基准就处于数列的中间位置。这个称为分区操作;
  • 递归地把小于基准值元素的子数列和大于基准值元素的子数列排序。

2.代码实现

void quick_sort(int q[],int l,int r)
{
	if(l >= r) return ;
	int i = l - 1,j = r + 1,x = q[l + r >> 1];
	while(i < j)
	{
		do i ++ ;while(q[i] < x); // while(q[++ i] < x);
		do j -- ;while(q[j] > x); // while(q[-- j] > x);
		if(i < j) swap(q[i],q[j]);
	}
	 quick_sort(q,l,j);
	 quick_sort(q,j + 1,r);
}

3.算法优化

如果我们把基准值总是选做第一个元素,这对某些近乎逆序的序列效果并不好,时间复杂度大大增加,因此我们可以采取随机选定基准的方法,如上面代码中选取中点来进行优化。

4.算法分析

  • 稳定性:不稳定
  • 时间复杂度:
  • 最好情况:o(n)
  • 最坏情况:o(\(n^2\))
  • 平均情况:o(n\(log_2\)n)
  • 空间复杂度:o(n)

标签:数列,基准值,int,while,算法,排序,模板
From: https://www.cnblogs.com/zhiao/p/17223815.html

相关文章

  • python 类中的属性排序
    可以使用Python中的类(class)来定义一个包含姓名和年龄的类。以下是一个示例代码:classPerson:def__init__(self,name,age):self.name=namese......
  • 小白也能学会的精简版GA遗传算法(Python)
    今天无意中看到了一篇讲遗传算法的文章,文章内容很短,大部分都是代码,代码跟平时见到的遗传算法不同之所以要拿这篇文章来讲,主要是因为原文没有对代码进行解释,但是,这段......
  • CAS算法
    CAS算法今天在看了《Java并发编程的艺术》,学习如何减少上下问切换的时候,里面说到了通过CAS算法来更新数据,而它不需要加锁。不太理解什么是CAS算法,所以在网上搜罗半天资料,......
  • 泛型对象的应用:常规业务逻辑模板化,使用通用的父类来定义字段,具体字段由实现类来赋予数
    泛型对象的应用:常规业务逻辑模板化,使用通用的父类来定义字段,具体字段由实现类来赋予数据//DEMO-1publicinterfaceCommonTemplateService<T,F>{publicTbuildCa......
  • python 雪花算法demo
    importtimeimportloggingclassInvalidSystemClock(Exception):"""时钟回拨异常"""pass#64位ID的划分WORKER_ID_BITS=5DATACENTER_ID_B......
  • 【设计模式】模板方法
    1.模板方法(TemplateMethod)的定义模板方法模式是一种行为设计模式,它在超类中定义一个算法的框架,允许子类在不修改结构的情况下重写算法的特定步骤。模板是对多种事物的结......
  • MasaFramework入门第二篇,安装MasaFramework了解各个模板
    安装MasaFramework模板执行以下命令安装最新Masa的模板dotnetnew--installMasa.Template安装完成将出现四个模板MasaBlazorApp:MasaBlazorApp的模板创建的是......
  • 冒泡排序
    1.描述:冒泡排序是一种常见的排序方法,遍历若干个需要排序的数列,依次比较相邻两个数值的大小,前者比后者大调换位置,渐进式循环后大的数值都会在最后,重复此操作直到出现有序的......
  • 算法 -- 反转链表
    反转链表简单3K相关企业给你单链表的头节点head,请你反转链表,并返回反转后的链表。示例1:输入:head=[1,2,3,4,5]输出:[5,4,3,2,1]示例2:输入:head=[1,2]输出......
  • nodejs的一个十六进制 加密 和 逆算法
    constkaitou="$@$@";Buffer.from(kaitou,"utf8").toString("hex");给以以上nodejs的逆算法consthexString="24402440";//十六进制字符串constbuffer=Bu......