第三章 :查找与排序-------3.2你需要掌握的快速排序算法

常见算法——七大查找算法和八大排序 目录查找算法摘要七大查找算法排序算法摘要八大排序算法 查找算法摘要     查找是在大量的信息中寻找一个特定的信息元素,在计算机应用中,查找是常用的基本运算,例如编译程序中符号表的查找。本文简单概括性的介绍了常见的七种查找算法,说是七种,其实二分查找、插值查找以及斐波那契查找都可以归为一类——插值查找。插值查找和斐波那契查找是在二分查找的基础上的优化查找算法。树表查找和哈希查找会在后续的博文中进行... 阅读详情

你需要掌握的快速排序算法:

 

思路:

QuickSort(A,p,r)
    if p<r
        q=Partition(A,p,r)
        QuickSort(A,p,q-1)
        QuickSort(A,q+1,r)

 

快排的划分算法:

 

思路:

    两个指针:scanner 、bigger。

    scanner:  <=sp 右移;

                    >sp    交换,bigger左移。

    边界:如果最后一个扫描元素大于主元,bigger左移之后小于了scanner;

               如果最后一个扫描元素小于主元,scanner的右移,导致scanner大于bigger。

               末了状态一定是: bigger<scanner,且二者临近。

#include<iostream>
using namespace std;

int partition(int A[],int p,int r){
	int pivot=A[p];
	int sp=p+1;  //扫描指针
	int bigger=r;  //右侧指针
	while(sp<=bigger){
		if(A[sp]<=pivot){  //扫描元素小于主元,左侧指针向左移 
			sp++;
		}
		else{
			swap(A[sp],A[bigger]);
			bigger--;
	    }
	} 
	swap(A[p],A[bigger]);
	return bigger;		//返回主元在交换完成后的下标
}

void quickSort(int A[],int p, int r){
	if(p<r){
		int q=partition(A,p,r);
		quickSort(A,p,q-1);
		quickSort(A,q+1,r); 
	}
} 


int main(){
	
	int arr[]={1,6,2,3,4,8,11,3,9,4,2,5,3};
	quickSort(arr,0,12);
	for(int i=0;i<13;i++){
		cout<<arr[i]<<" ";
	}
	return 0;
}


结果:

063_集合排序与查找算法 Java集合排序与查找实践指南 摘要: 本文系统介绍了Java集合排序与查找的核心技术。排序方面,详细解析了Comparable接口(自然排序)和Comparator接口(自定义排序),以及Collections.sort()和List.sort()方法的使用场景。底层算法层面,分析了双轴快排(基本类型)和TimSort(对象类型)的特点。查找方面,对比了线性查找(O(n))和二分查找(O(log n))的适用场景及实现要点。最后提供了排序与查找的场景选择策略,并针对常见问题给出优化建议 阅读详情

相关推荐

高分7(GF7)卫星数据制作平原地区DSM/DEM(三)——可信度分割

李国春(接上)

副组长的博客 1715

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

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

weixin_43908419的博客 2372

『与善仁』Appium基础 — 19、元素定位工具之UI Automator Viewer

文章目录(一)uiautomatorviewer定位工具1、uiautomatorviewer介绍2、uiautomatorviewer工具打开方式3、uiautomatorviewer布局介绍4、uiautomatorviewer工具的使用 之前我们在做web页面自动化的时候就说过,元素定位是页面自动化的第一步。 同理App自动化测试的第一步,也是元素的定位。 在APP中定位元素的话,需要借助一些元素定位工具。 APP中的元素定位工具大致有三种: uiautomatorviewer Appium Ins

繁华似锦Fighting 1520

第三关:快速排序

【代码】第三关:快速排序。

qq_50436460的博客 193

LangChain + Milvus Lite:从零搭建本地RAG知识库

本文详细介绍了如何利用LangChain、Milvus Lite和gte-large-zh模型,在本地从零搭建一个完整的RAG知识库系统。文章涵盖了环境配置、文档处理与向量化、本地向量库构建以及检索问答实现的全流程,重点突出了完全本地化部署带来的数据隐私安全和成本优势,为开发者提供了一条实践性极强的技术路径。

weixin_29044713的博客 445

GraphRAG 与 HippoRAG 深度对比:在 RAGFlow 中如何选择知识图谱方案?

本文深入对比了GraphRAG与HippoRAG在RAGFlow中的知识图谱构建方案,分析了两者在技术架构、资源消耗和场景适配性上的核心差异。GraphRAG适合需要快速响应和资源有限的场景,而HippoRAG则更适用于精确关系推理的专业领域。文章还提供了RAGFlow的演进路线和选型决策框架,帮助架构师根据实际需求做出合理选择。

weixin_27889245的博客 247

算法学习之快速排序

参考https://www.runoob.com/w3cnote/quick-sort.html 快速排序是C.R.A.Hoare于1962年提出的一种划分交换排序。它采用了一种分治的策略,通常称其为分治法(Divide-and-ConquerMethod)。 该方法的基本思想是 先从数列中取出一个数作为基准 将比这个数大的放到右边,小的都放到左边 重复1,2步,直到各个区间最终只剩下一个数 以一个数组作为示例,取区间第一个数为基准数。 0 1 2 3 4 5 6 7 8 9 72 .

UncleDong的博客 238

Matlab实战:用卡尔曼滤波搞定无人机GPS轨迹优化(附完整代码)

本文详细介绍了如何使用Matlab实现卡尔曼滤波(KF)算法优化无人机GPS轨迹,提供完整代码和工程实践指南。通过线性卡尔曼滤波技术,有效降低定位噪声,提升轨迹平滑度,适用于无人机导航和控制系统开发。

weixin_29061425的博客 253

数据结构算法之 三 快速排序

今儿来聊一聊 快速排序, 面试中最常提到的就是 冒泡和快排了 , 冒泡还不了解的同学 可以先去补一下冒泡排序的知识。 可能有其他的文章说 快排的时间复杂度是O(N^2),我个人觉得并不完全对 。因为0-100之间取随机数不可能永远取的是100吧! 记住这句话,最后你会明白是啥意思了。 快排有三种方式: 一、快排1 : 原理:取集合的第一个元素为中节点,将集合剩下的所有元素跟中节点对比,小的放左边 比之大的 放右边,然后把分配好的 左右两个集合再分别取第一个元素为中节点,再进行比较放...

u010838163的专栏 602

从放弃到再入门之拉格朗日对偶问题推导

普通同学的解法 无约束条件:求导就可以了 等式约束:代入消元,再求导 不等式约束:分情况讨论(在边界上和不在边界上),分别对应1,2的情况 然而发现,有些情况消元特别复杂,甚至不能求解 聪明同学的解法 发现:在最优点的情况下,约束曲面的法向量和目标函数的梯度反向必相同或相反 拉格朗日乘子法如何理解? (在2维里可以形象的解释为z=f(x,y)在约束条件g(x,y)=c中,极值...

qq_34564612的博客 1万+

将外部电磁近场数据导入 ANSYS HFSS

本博客介绍了如何将电磁近场数据导入 ANSYS HFSS。用户可能需要导入字段,无论是通过分析计算、测量、由其他工具生成还是从提供商处接收的字段,并将其用作实际激励来执行不同类型的分析。以下是导入过程的简要概述,视频链接中提供了完整的演示。为了定义简单基元近场源,HFSS 使用两种外部数据文件。首先,实际位置/字段数据以 .nfd 格式存储。其次,Ansys Near field Descriptor 文件(.and 文件)存储 .nfd 数据的一般几何信息和路径。

jkh920184196的博客 2331

第七章第三节(快速排序)

快速排序:快速排序是已知在实践中最快的排序算法,它的平均运行时间是O(N logN) 快速排序也是一种分治的递归算法。 快速排序的步骤:对数组S排序 1.如果S中元素个数是0或1,则返回。 2.取S中任一元素u,称为枢纽元(pivot) 3.将S-{u}(S中的其它元素)分为两个不相交的集合:S1 = { x ∈ S-{u} | x<= u} 和 S2= { x ∈ S-{u} | x >= u }; 4.返回 quickSort(S1),u,quickSort(S2) 选取枢纽元策略:对S[l

保持热爱,持续学习 599

RK3308B开发板WiFi+蓝牙一体模组RTL8821CS驱动移植保姆级教程(含DTS配置与避坑点)

本文提供RK3308B开发板RTL8821CS WiFi+蓝牙模组驱动移植的完整教程,涵盖SDK环境配置、DTS设备树设置、内核编译优化及功能验证全流程。重点解析引脚复用冲突、电源管理等关键配置,并给出常见错误解决方案,帮助开发者快速实现双模通信功能。

weixin_42531163的博客 398

算法设计与分析基础之分治法,详解二分查找、合并以及快速排序

任何一个可以用计算机求解的问题所需的计算时间都与其规模有关:问题的规模越小,越容易直接求解。 要想直接解决一个规模较大的问题,有时是很困难的。那么,为了更好地解决这些规模较大的问题,分治法应运而生了。 在计算机科学中,分治法是一种很重要的算法。它采取各个击破的技巧来解决一个规模较大的问题,该技巧是很多高效算法的基础,如排序算法(快速排序,归并排序),傅立叶变换(快速傅立叶变换)等。话不多说,直接上案例。 二分查找 问题描述 二分查找又称为折半查找,它要求待查找的数据元素必须是按关键字大小有序排列的..

叶落秋白的博客 3682

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

pscad IEEE标准系统搭建说明

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

排序算法2:直接选择排序与快速排序

前面我们进入了排序算的讲解。今天我们将继续学习几种重要的排序思想,好,咱们三连上车开始今天的内容。

2302_79964175的博客 3460

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

常用的排序与查找算法

常用排序、查找算法的介绍

jjkkzzzz的博客 1605

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

快速排序算法原理

1.快速排序算法是什么? 想必大家都学过和用过冒泡排序吧!这应该是大家成为程序员道路上学的第一个算法哦,那么我们的快速排序算法其实是在冒泡排序的基础上的一个改进,快速排序算法是利用一趟快速排序,一趟快排一般都是取第一个数作为准基数进行排序,将一串数据分成两个部分, 第一部分都比准基数小,第二部分都比准基数大,如:(-------第一部分------准基数------第二部分),也就这样以准...

Mr_xiayijie的博客 1万+

常用排序与查找算法大全

文章目录**1 选择排序****2 插入排序****3 冒泡排序****4 希尔排序****5 归并排序****6 快速排序****7 堆排序****8 基数排序****9 线性查找****10 折半查找** 1 选择排序 选择排序(Selection sort)是一种简单直观的排序算法。它的工作原理是:第一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,然后再从剩余的未排序元素中寻找到最小(大)元素,然后放到已排序的序列的末尾。以此类推,直到全部待排序的数据元素的个数为零。选择排

qq_39545674的博客 2887

快速排序与查找第K大的数

快速排序与查找第K大的数 今天种树的任务是复习一下快排,顺便实现了一下查找第K大的数的算法。 快速排序 非常常见也非常经典的算法,随便给你们找一篇。 https://www.cnblogs.com/ayqy/p/3862938.html 快速排序C++实现 我觉得我写的又短又好理解又好记忆(自恋ing~) #include <iostream> #include <stack&g...

u012183813的博客 4002

java学习笔记(十二):基本查找、二分查找、插值查找、斐波那契查找、分块查找、哈希查找、 树表查找、冒泡排序、选择排序、插入排序、快速排序

基本思想:二叉查找树是先对待查找的数据进行生成树,确保树的左分支的值小于右分支的值,然后在就行和每个节点的父节点比较大小,查找最适合的范围。更多的是先计算出当前数据的哈希值,用哈希值跟数组的长度进行计算,计算出应存入的位置,再挂在数组的后面形成链表,如果挂的元素太多而且数组长度过长,我们也会把链表转化为红黑树,进一步提高效率。但是排序之后,会改变原有数据的顺序,查找出来元素位置跟原来的元素可能是不一样的,所以排序之后再查找只能判断当前数据是否在容器当中,返回的索引无实际的意义。因此被称为黄金分割。

weixin_62764364的博客 1352

算法 排序 查找

插入排序 将一个数据插入到已经排好序的有序数据中,从而得到一个新的,个数加一的有序数据,适用于少量数据的排序。将第一个作为已经排好序的,然后每次从后取出插入到前面并排序 def insert_sort(ilist): for i in range(len(ilist)): for j in range(i): #如果索引为1小于索引为0,就在索引为0插入较小的,将原来小的位置元素弹出 if ilist[i] < ilist[j]:

我是张先生 3708

【考研】C语言排序和查找算法总结

本文将基于学生成绩管理程序来介绍常用的排序和查找算法及其总结。

Stu_Yang的博客 2939

【算法与数据结构】Java实现查找与排序

也叫做折半查找,属于有序查找算法。 基本思想:用给定值先与中间结点比较。比较完之后有三种情况: 插值查找 插值:是在二分查找的基础上,让中间的mid点,尽可能靠近想要查找的元素。 修改mid公式即可! 分块查找 当数据表中的数据元素很多时,可以采用分块查找。分块查找的过程: 哈希查找 树表查找 第二部分:排序算法 冒泡排序 Bubble Sort: 总结步骤: 选择排序 总结步骤: 插入排序 快速排序 定义两个索引:从前往后 寻找 比基准数大的 // 从后往前 寻找 比基准数小的 -

Orion 1365

快速排序与查找

排序和查找程序设计 实验目的: 1.掌握快速排序方法,实现无序数据的快速排序; 2. 掌握二分查找方法,实现有序数据的二分查找; 实验任务: 1. 编写算法实现快速排序:首先建立静态查找表,然后对其进行快速排序(非递减),输出排序后的数据序列; 2. 编写算法实现二分查找:在第1题有序表的基础上根据查找元素进行二分查找,并给出查找过程中依次比较元素的下标,查找成功时给出元素所在的位序,

phoebe 1083

Java的查找算法和排序算法

插值查找在二分查找的基础上改进。前提条件:数据尽可能的分布均匀。

iFulling的博客 1395

查找与排序的常用算法

查找与排序的常用方法

qq_57018268的博客 1582
上一篇: 第三章 :查找与排序(下)-------3.1分治法介绍及关键点解析
下一篇: 第三章 :查找与排序-------3.4快排之双向扫描分区法
Estrellas_
博客等级 码龄9年 273粉丝 233原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值