快速排序(QuickSort)

Latex | IEEE双栏排版中长公式的排版 IEEE双栏排版中,有时候公式过于长了,过宽,导致单栏排版不下。 阅读详情

http://student.zjzk.cn/course_ware/data_structure/web/paixu/paixu8.3.2.1.htm

1、算法思想

     快速排序是C.R.A.Hoare于1962年提出的一种划分交换排序。它采用了一种分治的策略,通常称其为分治法(Divide-and-ConquerMethod)。

(1) 分治法的基本思想
     分治法的基本思想是:将原问题分解为若干个规模更小但结构与原问题相似的子问题。递归地解这些子问题,然后将这些子问题的解组合为原问题的解。

(2)快速排序的基本思想
     设当前待排序的无序区为R[low..high],利用分治法可将快速排序的基本思想描述为:
①分解:  
    
  在R[low..high]中任选一个记录作为基准(Pivot),以此基准将当前无序区划分为左、右两个较小的子区间R[low..pivotpos-1)和R[pivotpos+1..high],并使左边子区间中所有记录的关键字均小于等于基准记录(不妨记为pivot)的关键字pivot.key,右边的子区间中所有记录的关键字均大于等于pivot.key,而基准记录pivot则位于正确的位置(pivotpos)上,它无须参加后续的排序。
   注意:
     划分的关键是要求出基准记录所在的位置pivotpos。划分的结果可以简单地表示为(注意pivot=R[pivotpos]):
     R[low..pivotpos-1].keys≤R[pivotpos].key≤R[pivotpos+1..high].keys
                  其中low≤pivotpos≤high。
②求解:  
     
通过递归调用快速排序对左、右子区间R[low..pivotpos-1]和R[pivotpos+1..high]快速排序。
③组合:  
    
  因为当"求解"步骤中的两个递归调用结束时,其左、右两个子区间已有序。对快速排序而言,"组合"步骤无须做什么,可看作是空操作。

2、快速排序算法QuickSort
  void QuickSort(SeqList R,int low,int high)
   { //对R[low..high]快速排序
     int pivotpos; //划分后的基准记录的位置
     if(low<high){//仅当区间长度大于1时才须排序
        pivotpos=Partition(R,low,high); //对R[low..high]做划分
        QuickSort(R,low,pivotpos-1); //对左区间递归排序
        QuickSort(R,pivotpos+1,high); //对右区间递归排序
      }

    } //QuickSort


附上自己的源码:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void QuickSort(int *a,int low,int high);
int m_part(int *a,int,int);
int main()
{
//---------------------------------快排quicksort-------------

	int a[10] = {7,5,9,2,10,6,12,4,5,3};

	int n=sizeof(a)/sizeof(int);

	QuickSort(a,0,n-1);

	for(int i=0;i<n;i++)
	{
		printf("%d ",a[i]);
	}
	printf("\n");

	system("pause");

	return 0;
}
void QuickSort( int *a ,int low,int high)
{
	if(low<high)
	{
		int pov = m_part(a,low,high);
		QuickSort(a,low,pov);
		QuickSort(a,pov+1,high);
	}
}
int m_part(int *a,int low,int high)
{
	int pov = a[low];
	int i=low,j=high;
	while(i<j)
	{
		while( a[j] >= pov && j > i )
			j--;
		a[i] = a[j];
		a[j] = pov;
		while( a[i] <= pov && i < j )
			i++;
		a[j] = a[i];
		a[i] = pov;
	}
	return i;
}


逆向工程实战:解密AppleAccount的X-MMe-Nas-Qualify签名生成机制 本文通过逆向工程实战,详细解析了AppleAccount服务中X-MMe-Nas-Qualify签名的生成机制。作者利用Frida进行动态追踪定位签名源头,结合IDA Pro进行静态分析,并借助LLDB动态调试还原核心算法。文章最终分享了如何独立于苹果官方库,通过Python代码复现签名算法,为自动化测试和深度交互苹果服务的开发者提供了关键技术路径。 阅读详情

相关推荐

从‘静态拍照’到‘动态录像’:用Malmquist指数讲好你的效率变化故事(附Stata/R代码)

本文深入探讨了如何利用Malmquist指数构建动态效率分析框架,从静态数据到动态叙事的转变。通过分解技术效率变化(EC)和技术进步(TC),结合Stata/R代码实现四种动态可视化方法,帮助研究者更直观地展示效率变化的动态特征。文章还提供了诊断性叙事结构和比较叙事技巧,助力决策者理解效率提升的来源与趋势。

weixin_32678995的博客 603

【数据结构】排序3——交换排序(冒泡排序、快速排序)

【数据结构】排序3——交换排序(冒泡排序、快速排序)

FishC的博客 1021

拓扑优化背后的科学:ANSYS Workbench中的算法与原理

本文深入解析了ANSYS Workbench中拓扑优化的科学原理与算法实现,重点介绍了密度法(SIMP)和灵敏度分析等核心算法。通过分层架构解析和参数调优实战,展示如何有效进行模型验证与多物理场耦合优化,帮助工程师提升结构设计效率与性能。

weixin_29250403的博客 417

【数据结构】快速排序详解

超级详细的快速排序,看完即可手撕快排!

weixin_69519040的博客 7887

帆软FineBI考试题

Flint 补录表,有批次删除功能。在分析主题内添加数据时能够选择批量添加数据。插件安装过程中有报错提示需要下载 Fine I for Excel 运行环境进行修复,修复完毕后重新安装插件。图例显示支持自定义设置,且图例标题支持隐藏显示。finebi中的指标如果想进行维度区间/真的自定义分组,不能直接拖拽到组建区域中需要先转化为维度方可进行指标分组。excel报表不支持分页。

Davina_yu的博客 1608

AD20.多对多工程中将某个原理图导入PCB工程

AD20将多个原理图中的一个或多个导入到PCB文件中

鬼爷杂货铺 1万+

[数据结构基础]排序算法第三弹 -- 快速排序

本文对快速排序的递归和非递归实现的基本思想进行了讲解,并分析了快速排序的时间复杂度,最后给出了快排的两种优化方案

weixin_43908419的博客 2372

强化学习经典算法笔记(九):LSTM加持的PolicyGradient算法

强化学习经典算法笔记(九):LSTM加持的PolicyGradient算法 在上文《强化学习经典算法笔记(八):LSTM加持的A2C算法解决POMDP问题》的基础上,实现了LSTM+MLP的Policy Gradient算法。 实现过程如下: import argparse, math, os, sys import numpy as np import gym from gym import wrappers import matplotlib.pyplot as plt import torch fr

hhy_csdn的博客 5636

数据结构——【排序】——快速排序

快速排序的基本思想:在待排序表中任取一个元素作为基准,通过一趟排序将待排序表划分为独立的两个部分,使得左边元素都小于基准,右边元素都大于基准。 时间复杂度:log2n 稳定性:不稳定 下面投放快速排序的代码 #include<stdio.h> #include<stdlib.h> #include<malloc.h> #define MaxSiz...

奔跑的狮子 421

YOLOv13添加轻量化的EMA模块Faster_EMA,轻量又涨点!map50提升4.56个点,召回率提升9.66!

本文介绍了YOLOv13模型的优化移植方法,通过添加Faster_EMA模块和超参数调整,使模型性能显著提升。主要修改包括:1) 创建新的模型配置文件yolov13-Faster_EMA.yaml;2) 在tasks.py中添加新模块;3) 修改__init__.py和block.py文件,新增Partial_conv3和DropPath类。优化后模型mAP50提升4.56%,召回率提升9.66%,验证了改进方案的有效性。代码实现了局部卷积和随机深度等先进技术,为YOLO系列模型性能优化提供了新思路。

FJN110的博客 2605

VHDL语法学习笔记:一文掌握VHDL语法

今天给大侠带来FPGA 之 VHDL 语法学习笔记,话不多说,上货。 VHDL语法学习笔记 一、VHDL简介 1.1 VHDL 的历史 VHDL 的 英 文 全 名 是 Very-High-Speed Integrated Circuit Hardware DescriptionLanguage,诞生于 1982 年。 1987 年底,VHDL 被 IEEE 和美国国防部确认为标准硬件描述语言。自 IEEE 公布了 VHDL 的标准版本 IEEE-1076(简称 87 版)...

2万+

【数据结构之排序5】快速排序

1、算法思想 快速排序是C.R.A.Hoare于1962年提出的一种划分交换排序。它采用了一种分治的策略,通常称其为分治法(Divide-and-ConquerMethod)。 (1)分治法的基本思想 分治法的基本思想是:将原问题分解为若干个规模更小但结构与原问题相似的子问题。递归地解这些子问题,然后将这些子问题的解组合为原问题的解。 (2)快速排序的基本思想 设当前待排序的无序

偶尔e网事 2906

如何使用VNC对openEuler系统进行远程图形化操作

本文详细介绍了在openEuler系统中配置VNC远程图形化操作的方法。主要内容包括:1)服务端配置:安装GNOME图形界面和TigerVNC服务,创建VNC用户并设置密码,配置VNC服务启动脚本;2)客户端连接:使用VNC Viewer等工具连接服务器;3)常见问题解决方法。通过5901端口建立连接后,用户可远程操作openEuler图形界面,适用于需要图形化管理的场景。

2501_93651177的博客 315

快速排序Quicksort

#include<iostream> using namespace std; int a[2005]; int main() { int quicksort(int r,int l); int n,i; while(cin>>n) { if(n==0) { b...

weixin_30426957的博客 75

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

c++ 快速排序(QuickSort)

为了缓解最坏的情况,使用了各种技术,例如选择一个好的主元(例如,三的中位数)并使用随机算法(随机快速排序)在排序之前对元素进行混洗。分区的目标是将主元(可以选择任何元素作为主元)放置在已排序数组中的正确位置,并将所有较小的元素放在主元的左侧,将所有较大的元素放在主元的右侧。它不是稳定的排序,这意味着如果两个元素具有相同的键,在快速排序的情况下,它们的相对顺序将不会保留在排序的输出中,因为这里我们根据枢轴的位置交换元素(不考虑它们的原始位置)职位)。QuickSort 中的分区:将枢轴与 80 进行比较。

csdn_aspnet的专栏,请点击博客主页右上角三个点中的私信联系 9万+

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

快速排序算法QuickSort

本文主要介绍了快速排序算法的基本思想和实际代码实现,给出QuickSort和Partition组合写法、QuickSort简洁两种C++代码实现方法。

fcc13461862452的博客 297

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

快速排序Quicksort怎么写即其原理

【代码】快速排序Quicksort怎么写即其原理。

HiL_001的博客 341

QuickSort 快速排序

quickSort 快速排序算法 借鉴《啊哈!算法》这本萌书和python菜鸟教程的想法。 思想: 挑选基准值:从数列中挑出一个元素,称为"基准"(pivot); 分割:重新排序数列,所有比基准值小的元素摆放在基准前面,所有比基准值大的元素摆在基准后面(与基准值相等的数可以到任何一边)。在这个分割结束之后,对基准值的排序就已经完成; 递归排序子序列:递归地将小于基准值元素的子序列和大于基准值元...

weixin_43973433的博客 332

快速排序QuickSort

快速排序基本思想: 选任意值与首元素交换(王道基础课没讲) 进行逐个对比,先right–,后来left++ 结束的标志是left==right,因此所有的判断都是left<right /* ------------------------------------------------- Author: wry date: 2022/3/2 10:21 Description: QuickSort --------------------------

weixin_44822042的博客 157

快速排序(Quicksort)的Javascript实现

阮一峰的Blog:快速排序(Quicksort)的Javascript实现

个人技术积累 451

快速排序/quickSort

int partition(int a[], int l, int h) { int i=l+1, j=h; int me=l; while (i<j) { while (a[i]<=a[l] && i<j) { i++; } while (a[j]>a[l] && j>i) { j--; } if (i < j) { int swap = a[i];

leslietuang的专栏 314

快速排序quicksort

【代码】快速排序quicksort。

weixin_73598089的博客 847

用Python实现快速排序(Quicksort)算法

1.快速排序(Quicksort)算法介绍 快速排序(Quicksort)是对冒泡排序的一种改进,但是不是稳定的排序算法 2.算法思想 1)设置两个变量i、j,排序开始的时候:i=0,j=N-1; 2)以第一个数组元素作为关键数据,保存在key中,即key=A[0]; 3)从j开始向前搜索,即由后开始向前搜索(j--),找到第一个小于key的值A[j],用A[j]覆盖A[0], 4...

Age 1万+

php快速排序quickSort,PHP快速排序quicksort实例详解

本文实例讲述了PHP快速排序quicksort。分享给大家供大家参考,具体如下:quicksort在快速排序算法中,使用了分治策略。首先把序列分成两个子序列,递归地对子序列进行排序,直到整个序列排序结束。(即一分为二的思想)步骤如下:在序列中选择一个关键元素做为轴;对序列进行重新排序,将比轴小的元素移到轴的前边,比轴大的元素移动到轴的后面。在进行划分之后,轴便在它最终的位置上;递归地对两个子序列进...

weixin_39780260的博客 145

JAVA快速排序quickSort

JAVA快速排序quickSort代码实现 快排,主要思想是填坑和分治。 1.填坑:主要目的是取一个数 tmp,将这个数放到数组某一个位置,使得这个位置前面的数都比 tmp 小,这个位置后面的数都比 tmp 大。 (1) 设置左右指针(left、right),用于方便比较数组中值与 tmp 的大小; (2) 从数组 nums[] 中取一个中位数,一般为第一个数即 nums[0] ,取出来之后相当于在这个位置(即左指针left的位置)挖了一个坑 “hole”,接下来要做的就是挖坑填坑; (3) 现在要填左指针

weixin_44131027的博客 303

快速排序 quicksort

快速排序 核心策略:分而治之 核心思路: 整体思路: partition:随机选取一个轴点,使得序列中小于轴点的元素杂轴点的左侧,大于轴点的元素在轴点的右侧。 开始时,L和G都是空的,此时随机选取一个元素与序列首交换,将交换后的序列首的值作为轴点pivot。初始化mi=lo;初始化k=lo+1,遍历序列,当nums[k]<pivot,则将L扩展。 再将轴点的前缀子序列和后缀子序列分别如上述partition递归排序。 代码实现: #include<iostream> #include&l

weixin_45007714的博客 181
下一篇: 如何优化JavaScript脚本的性能
leepwang
博客等级 码龄16年 26粉丝 5原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值