算法笔记-快速排序(Quick Sort)之Selection

AgentScope Java 1.1.0 Harness架构:超越Prompt的智能体工程化实践 在构建复杂的大模型应用时,传统的指令驱动模式常面临状态管理混乱、流程控制缺失和可观测性薄弱等挑战。AgentScope Java 1.1.0引入的Harness架构,通过工作流(Workflow)和上下文(Context)等核心组件,将智能体的编排、执行与状态管理标准化。该架构将流程控制外部化与声明化,支持通过YAML或Java DSL定义复杂逻辑,同时提供结构化的执行轨迹(Execution Trace),极大地提升了应用的可维护性与可调试性。对于需要多智能体协作、与外部系统集成的生产级场景,Harnes 阅读详情

Quick-Selection问题描述:
Goal: 给了一个有N个元素的数组,找出最大的第K个元素。(或返回最大or最小的K个)
Ex: Min(k = 0), Max(k = N-1), Medium(k = N/2)

思路:
给数组Partition(如果是返回最大or最小的K个元素不一定要排序,因为没要求返回排好序的K个数,但Partition用的是Quick Sort的),找到第k个最大的数。
1. Partition数组使得:
- a[j]的位置已归位
- 位置j左边的数都比它小
- 位置j右边的数都比它大
2. 判断当前归位的j是否等于k,若K<j,则partitionj左边的部分,若k>j,则partitionj右边的部分,由此递归,直到j等于k,算法结束。(如果在第一轮partition结束后j就刚好等于k则算法结束。)

Language: Java

public static Comparable select(Comparable[] a, int k)
{
    StdRandom.shuffle(a);
    while(hi > lo)//当没有return且hi>lo时继续执行while,继续partition
    {
        int j = partition(a, lo, hi);
        if(j < k)
            lo = j+1;//下一次partition j 右边的subarray
        else if(j > k)
            hi = j-1;//下一次partition j 左边的subarray
        else
            return a[k];//j=k,返回
}
return a[k];//一直不满足,说明k>=N或k<=1,返回
}

算法细节:

  • 对于已排序的数组,找最大的K个元素,上界是NlogNNlogN,因为相当于二分法;下界是NN,相当于K很小的时候,起码要过一遍数组。
快速排序与快速选择算法详解与优化 快速排序是一种基于分治策略的高效排序算法,平均时间复杂度为O(nlogn),其核心在于通过分区(partition)操作将数组分为小于和大于基准值(pivot)的两部分。快速选择算法则是在此基础上衍生出的选择算法,能够在O(n)时间复杂度内找到第k大元素。这两种算法都体现了分治思想和递归实现的核心编程范式,是算法工程师必须掌握的基础技能。在实际工程中,通过三数取中法选择pivot、尾递归优化等技术可以显著提升性能。这些算法在大数据处理、实时系统等场景有广泛应用,如电商TopK商品统计、金融风控异常检测等。理 阅读详情

相关推荐

[Multisim][模电实验]简易函数信号发生器的设计与实现_北京邮电大学2019级信通院电子电路实验下

本文记述了笔者设计并实现以±12V供电电压输出1KHZ~10KHZ频率连续可调的方波、三角波和正弦波的过程。其中,方波输出电压峰峰值为12V(误差<20%),占空比可调、三角波输出电压峰峰值为8V(±20%),正弦波输出电压峰峰值≥1V。

lgc0208的博客 4万+

Selection in QuickSort

Why chose selection sort? When the number of data is very small, selection sort is more efficient than quicksort ,its plan is to set a length k,if array is smaller than k,use selection_quick,or use q

xinyu913 434

eDP/DP接口简介

目前,在视频传输协议以及接口领域,外部接口主要是DP与HDMI两分天下,当然之前出现过很多接口-VGA, DVI等等,最新平台基本以这两个为主;笔记本内部接口就基本上使用eDP((Embedded Display Port))作为标准接口来驱动液晶屏了。那么问题来了,eDP和DP,是完全兼容的么?eDP,DP,HDMI,这三种接口的显示器,可以插在同一个接口上使用么?这篇文章,就会从硬件和一部分协议的角度分析一下这三大协议。

weixin_50518899的博客 2万+

Java 实现 Quicksort 和 Selection

Java 实现 Quicksort 和 Selection QuickSort import java.util.Arrays; import java.util.Random; public class Quicksort { private static int partition(int[] arr, int low, int high) { Random rand...

qq_41740495的博客 195

【Web实战】微信小程序逆向

2E 70 6E 67”为带存放路径的文件名称,“00 00 11 7C”对应文件在小程序包中的具体偏移位置,“00 01 01 F7“对应文件在小程序包中的数据长度。但这并不是最初的原项目文件结构,原因是微信服务器会将小程序源码中所有的“js”文件压入“app-service.js”文件中,将所有的“json”文件压入“app-config.json”中,将所有的“wxml”文件压入“page-frame.html”文件中,“wxss”则在处理之后以“html”文件的形式存留在对应页面目录之下。

若有战,召必回 1943

一文理解近红外光谱数据建模步骤的细节(细节知识总结)

上一篇文章,向入门的同志大体介绍了近红外光谱数据建模的内容,依据上文其实已经可以基本完成数据建模的工作,但是很多工作不够细致,本文便是分享其中的一些技术细节。

weixin_46207310的博客 5567

快速排序(SelectionSort)

package array; /*** * * @time 2012/2/19 */ public class SelectSort { public static void main(String[] args) { int a[] = { 1, 5, 6, 2, 3, 8, 10, 7, 9 };//静态定义一个数组 System.out.println("将下列数排序:...

923723914 130

Android 车载应用开发与优化(1) - CarLauncher 核心功能与动态集成探秘

本文深入探讨了Android车载应用开发中CarLauncher的核心功能与实现原理。作为车载系统的“脸面”,CarLauncher不仅提供应用入口,更通过动态集成技术将地图、音乐等关键信息嵌入桌面,以保障驾驶安全与体验。文章详细解析了其源码结构、权限配置、应用启动机制以及基于Activity嵌入的动态集成黑魔法,为开发者提供了从基础认识到高级优化的完整指南。

weixin_29239279的博客 281

[Leetcode] 771. Jewels and Stones

Description: You’re given strings J representing the types of stones that are jewels, and S representing the stones you have. Each character in S is a type of stone you have. You want to know how m...

Peggy_Chang的博客 623

TDDFT计算软件Octopus学习笔记(二):基态计算(Si)

本文以硅为例,来进行基态计算。

陈啸的博客 7305

LeRobot 入门教程(一)软件环境、部署流程及摄像头配置

🤖 LeRobot:开源机器人学习平台 摘要:LeRobot是一个基于PyTorch的开源机器人学习平台,提供模型、数据集和工具,旨在降低机器人技术门槛。平台包含经过验证的模仿学习和强化学习方法,并提供预训练模型、人类演示数据集及模拟环境。安装需从源码获取,支持Python 3.10环境,可选扩展包括仿真环境(如gym-aloha)、电机控制(Dynamixel/Feetech SDK)和实验跟踪(Weights & Biases)。该平台托管在HuggingFace,并设有社区Discord频道

2506_90492529的博客 3416

冒泡排序(Bubble Sort)以及选择排序(Selection Sort)和快速排序(Quick Sort)详细解析

!

2302_81249757的博客 2092

华为OD机试 - 进制转换 - 二进制(Python/JS/C/C++ 2024 B卷 100分)

华为OD机试 2024E卷题库疯狂收录中,刷题。

学Java,找哪吒 916

freeCodeCamp 课程设计解析:用递归分治实现快速排序(Quick Sort)

本文基于 freeCodeCamp 课程大纲中的 "Implement Quick Sort" 挑战文档展开,系统讲解快速排序的分治思想、pivot 分区策略与递归收敛过程,并逐条剖析该挑战的四组测试断言、种子代码与官方参考实现,帮助你掌握一套不依赖内置 `.sort()` 的完整排序算法实现方案,同时了解这道题在 freeCodeCamp 课程体系中的定位与演进。 ## 挑战背景:快速排序在

gitblog_00957的博客 713

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

pscad IEEE标准系统搭建说明

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

30-seconds-of-code 快速排序(Quick Sort)JavaScript 实现详解

快速排序(Quicksort)是 30-seconds-of-code 仓库中 JavaScript 算法与递归集合的核心示例之一,本篇以 [content/snippets/js/s/quick-sort.md](https://link.gitcode.com/i/b2f38b25d99d0c9ca88c4cba6397a09e) 为骨架,结合仓库内 Big-O 速查表、归并排序(Merge

gitblog_00155的博客 936

STM32F407中文手册

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

【快速排序】Quick Sort是怎样运行的?

时间复杂度: 一般情况:O(nlogn) 最坏情况 : O(n^2) 快速排序的步骤: 举例数组:a[]={21,32,30,49,21,42,38,27,29,15,4,34,50,4,24} 第一步:将数组第一个元素a[0]=21,把数组分成两块,左边的比21小,右边的比21要大(将整个数组循环一遍来实现) 此时,我就已经可以把左边[4,15,4]和右边[21,42,38,27,29,32,30,34,50,49,24]分别当成一个需要排序的数...

weixin_61087354的博客 134

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

Insertion sort, select sort, Quick sort and Merge sort

冒泡排序 插入排序 选择排序 快速排序

自强学堂 955

Bubble, Insertion, Selection, Quick and Heap Sort

Bubble, Insertion, Selection, Quick and Heap Sort

GeorgeGuo 1942

Heap_Sort,Shell_Sort and Quick_Sort

介绍三种排序,堆排序、希尔排序和快速排序。 首先是堆排序:一个有n个记录的线性序列{R1,R2,R3,....Rn},其关键字序列{K1,K2,....,Kn}                          满足{Ki                          来表示堆的话,就是说该树中的非叶子结点的值均不大于(或不小于)其左右两个分支结点的值。 堆排序有两个关键步骤: (1

Kay's space 1747

快速排序与快速选择算法(quick sort and quick select algorithm)

飞燕之家上的一道排序题: 题目描述:某市重点高中很有名气,它在计算录取分数线的时候,采用以下办法:总人数乘以录取百分比,得到录取人数k后,从最高分开始数k个人,这个人的中考分数就作为这所学校的录取分数线了。输入:有多个测试点,每个测试点第一行是n和k(kn是总人数,总人数不超过1e6,k是录取的人数第二行就是n个学生的中考分数,由于采用一种特殊的标准计分方式,分数范围在0至1e8输出:对每

yuliyang的专栏 3127

笔试算法题(56):快速排序实现之非递归实现,最小k值选择(non-recursive version, Minimal Kth Selection of Quick Sort)...

议题:快速排序实现之五(非递归实现,短序列优先处理,减少递归栈大小) 分析: 算法原理:此算法实现适用于系统栈空间不足够快速排序递归调用的需求,从而使用非递归实现快速排序算法;使用显示下推栈存储快速排序中的每一次划分结果 (将left和right都压入堆栈),并且首先处理划分序列较短的子序列(也就是在得到一次划分的左右部分时,首先将长序列入栈,然后让段序列入栈), 这样可以保证当快速排...

weixin_33881753的博客 317

快速排序算法原理与优化实践指南

排序算法是计算机科学基础核心概念,其中快速排序以其O(n log n)的平均时间复杂度成为最常用的高效排序方案。该算法基于分治策略,通过基准选择将数据分区并递归处理,其原地排序特性显著优于归并排序的空间复杂度。在实际工程中,快速排序广泛应用于电商价格系统、大数据处理等场景,通过三数取中法优化基准选择可避免最坏情况下的O(n²)复杂度。针对不同数据特征,可结合插入排序优化小数组处理,或采用三路划分应对重复元素,这些技巧在处理百万级数据时能提升30%以上性能。现代编程语言如Python、Java的内置排序都采用

weixin_33767813的博客 335

Bubble sort, Insertion sort, merge sort, quick sort, heap sort

#include <iostream> #include <algorithm> #include <cstdlib> #include <ctime> using std::cout; using std::endl; const int n = 80000;// bubblesort void bubble(int * a, int n) { for (int i = 0; i < n

github_35095990的博客 684

Quick sort

#include<bits/stdc++.h> using namespace std;int L[] = {3,44,38,5,47,15,36,26,27,2,46,4,19,50,48};void QuickSort(int left,int right){ int l = left; int r = right; if(left>=right){ re

zhoutonglx的专栏 564

排序-选择排序(Selection Sort)冒泡排序(Bubble Sort)

本文介绍了冒泡排序和选择排序的基本思路及时间复杂度(均为O(n^2)),并提供了代码实现。冒泡排序通过相邻元素比较交换将最大值"浮"到末尾,而选择排序则每轮选择最小元素置于开头。文章还给出了选择排序的双向优化版本,同时比较了七大常见排序算法的稳定性:插入、冒泡、归并排序稳定;快速、选择、希尔、堆排序不稳定。文中附有相关排序算法的扩展阅读链接。

2401_87882972的博客 278

C# 四大基础排序算法详解:冒泡、选择、插入、快速排序(开发岗面试常见题)

本文使用 C# 实现冒泡排序、选择排序、插入排序和快速排序四种经典排序算法,每段代码都带逐行详细注释,讲解算法思想、执行流程、时间/空间复杂度、稳定性与优缺点,并给出对比总结,适合算法入门与 C# 学习者。

C#,机器视觉,上位机开发 478
上一篇: 算法笔记-快速排序(Quick Sort)
下一篇: [Leetcode] 215. Kth Largest Element in an Array
Peggy_Chang
博客等级 码龄11年 21粉丝 44原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值