快速排序 容易理解的版本

快速排序(快排) (C语言实现) 本篇博客学习内容是快速排序,快速排序有多种不同的版本和优化,我们这次的目的就是将这些版本都搞明白,废话不多说,我们开始。 阅读详情
package huaweiod.排序算法;

import java.util.Arrays;

public class 快速排序 {
    public static void main(String[] args) {
        int[] arr = {9,8,3,5,6,7,8,9};
        mysort(arr, 0, arr.length - 1);
//        myprint(arr," ");

    }

    private static void myprint(int[] arr, String str) {

        for (int i = 0; i < arr.length; i++) {
            System.out.print(arr[i] + " ");
        }
        System.out.println();
    }

    private static void mysort(int[] arr, int left, int right) {
        if (left >= right) {
            return;
        }
        int[] temp = new int[arr.length];
        int tleft = left;
        int tright = right;

        int middle = arr[left];

        for (int i = left + 1; i <= right; i++) {
            if (arr[i] <= middle) {
                temp[tleft] = arr[i];
                tleft++;
            } else {
                temp[tright] = arr[i];
                tright--;
            }

        }
        temp[tleft] = middle;

        for (int i = left; i <= right; i++) {
            arr[i] = temp[i];
        }
        myprint(arr, " ");

        mysort(arr, left, tleft - 1);
        mysort(arr, tleft + 1, right);


    }

    private static void myswap(int[] arr, int l, int r) {
        int temp = arr[l];
        arr[l] = arr[r];
        arr[r] = temp;
    }
}

主要思想

找一个数 比它小的放左边 比它大的放左边

然后递归

深度理解排序算法——快速排序 快速排序、算法 阅读详情

相关推荐

快速排序(模板+几种情况)

版本一(y总的模板) void quick_sort(int q[],int l , int r) { if (l >= r) return;//递归结束的条件,只有一个数字or是空数组,结束该层递归 int i = l - 1;//在while循环体中省略了i++;则需要在条件判断中先++i;所以这里减一 int j = r + 1;//同理 int x = q[(l + r) / 2];//可以取开头or随机取值or中...

qq_44782542的博客 524

快速排序(最容易理解的版本)

高快省的排序算法 有没有既不浪费空间又可以快一点的排序算法呢?那就是“快速排序”啦!光听这个名字是不是就觉得很高端呢。 假设我们现在对“6  1  2 7  9  3  4  5 10  8”这个10个数进行排序。首先在这个序列中随便找一个数作为基准数(不要被这个名词吓到了,就是一个用来参照的数,待会你就知道它用来做啥的了)。为了方便,就让第一个数6作为基准数吧。接下来,需要将这个序列中所有比...

Talk is cheap,show me the code. 334

【数据结构】-快速排序的四种方法实现以及优化

关于快排的四种写法,以及优化版本

qq_69369227的博客 8745

笔记:快速排序,精简理解版本

此理解基于某个关于快速排序的考试题:对数组 A=(2,8,7,1,3,5,6,4)用快速排序算法的划分方法进行一趟划分后得到 的数组 A 为( ) (非递减排序, 以最后一个元素为基准元素)。 进行一趟划分的 计算时间为( ) 。 A、 (1,2,8,7,3,5,6,4) B、 (1,2,3,4,8,7,5,6) C、 (2,3,1,4,7,5,6,8) D、 (2,1,3,4,8,7,5,6) A、 0(1) B、 0(Ign) C、 0(n) D、 0(nlgn) 答案是:C,C 解析过程如下: 原

LinXiaoTaoZi的博客 1336

深入理解快速排序算法及其原地版本

本文详细探讨了快速排序算法的原理和实现,特别是原地版本的细节。通过分析给定的书籍章节内容,我们将逐步理解快速排序的递归逻辑,以及如何在不增加额外空间的情况下对数组进行分区和排序。文章通过具体的代码示例和流程图,帮助读者更好地掌握快速排序算法的核心思想。

weixin_33660045的博客 292

通过C语言实现三种版本的快速排序

快速排序是一种高效的排序算法,通过选取一个“基准”元素,将数组分为两部分:比基准小的元素和比基准大的元素,然后递归地对这两部分进行排序,从而实现对整个数组的排序。该算法平均时间复杂度为O(nlogn),最坏情况下为O(n²),但由于实际应用中很少出现最坏情况,因此快速排序仍然是一种广泛使用的排序算法。快速排序整体的综合性能和使用场景都是比较好的,所以才敢叫快速排序时间复杂度:O(N*logN)空间复杂度:O(logN)稳定性:不稳定。

qq_74013365的博客 2374

【数据结构】深入浅出理解快速排序背后的原理 以及 版本优化【万字详解】(C语言实现)

快速排序是Hoare于1962年提出的一种二叉树结构的交换排序方法。# 一、Hoare版本挖坑法是Hoare排序的一个思路上的优化:不用再考虑为什么右边先走。因为一开始的坑就在左边,那么一开始就得先从右边开始找,找比坑小的数。

NiNi_suanfa的博客 584

PX4自定义uORB消息与MAVLink消息映射实战:从飞控到QGC地面站完整流程解析

本文详细解析PX4飞控中自定义uORB消息与MAVLink消息映射的完整流程,涵盖从飞控内部消息定义、MAVLink消息创建到QGC地面站接收显示的全链路实践。重点介绍如何使用mavlink inspector工具进行调试,解决版本兼容性和多实例消息处理等常见问题,为无人机开发者提供可靠的实时数据监控方案。

ll5678的博客 1067

使用java实现快速排序(我认为是最简单最容易理解的版本)

一切都在代码和注释之中。复制粘贴就能跑,边跑边看才是最愉快的。 所以,话不多说,放码过来。   public class QuickSort { public static void main(String[] args) { int x[]={6,1,2,7,9,100,100,4,5,10,8}; //i = 0, j = 10 quickSort(x, 0, x.len...

884

传感器采集信息的频率(采样频率)

较高的采集频率通常能提供更详细的信息,但也会增加数据处理和存储的负担。在某些应用中,较高的采样频率可能是必要的,而在其他情况下,则可能会选择适当的低采样频率以降低功耗和数据处理压力。传感器采集信息的频率(采样频率)是指传感器在一定时间内对输入信号进行采样的次数。对于一些需要快速检测和响应的应用,如运动传感器、声音传感器等,高采样频率是至关重要的。高采样频率通常需要更多的功耗和更大的存储容量,因为产生的数据量更大。例如,对于快速运动的对象,较低的采样频率可能无法捕捉到运动的真实轨迹。

chen的博客 5338

Keil5安装多版本共存方案:实用技巧分享

分享Keil5安装过程中实现多版本共存的实用方法,解决开发环境冲突问题。通过合理配置路径与版本管理,让keil5安装更高效稳定,提升嵌入式开发体验。

weixin_42514750的博客 1525

JS 快速排序 (超级容易理解的版本) 看完后,再也不发愁背不下快排JS代码了

空间复杂度较高,但是易于理解,完全按照快排字面意思来编码: const s1 = (arr) => { const left = []; const right = []; if (arr.length < 2) return arr; const base = arr[0]; arr.slice(1).forEach(i => i < base ? left.push(i) : right.push(i)); const r1 = s

Hull Qin 1882

Dify DSL文件分享 Dify讨论群 大模型token资源等(持续收集更新)

基于LLMOps平台-Dify的一站式学习平台。包含不限于:Dify案例、DSL文件分享、模型接入、Dify交流讨论等各类资源分享。

同名公众号:dify实验室 3713

排序——快速排序(更新三个常见版本)

快速排序(Quicksort) 是对冒泡排序的一种改进。 它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。 下图红色线条为基准值,所分割的两部分,一部分比基准值小,一部分大于等于基准值。 void quickSort_digui(...

巫山云的亲笔博客 390

树根互联Java开发面试题及参考答案

说一下 Java 集合类。 Java 集合类是用于存储和操作一组对象的容器。它提供了多种数据结构,方便程序员对数据进行高效的管理和处理。 Java 集合框架主要包括两大接口:Collection 和 Map。 Collection 接口是一组对象的集合,它有三个主要的子接口:List、Set 和 Queue。 List 接口代表有序的集合,可以包含重复的元素。例如 ArrayList,它是基于数组实现的动态数组。它的优点是随机访问效率高,通过索引访问元素的时间复杂度为 O (1)。当

大模型大数据攻城狮的专栏 853

1、JMP脚本编程全面指南:从基础到高级应用

本博客全面介绍了JMP脚本编程的各个方面,从JMP基础和JSL入门,到数据类型、数据结构、编程方法、数据表操作、图形与三维场景脚本,再到应用程序创建与扩展功能。内容涵盖脚本工具使用、常见任务实现、兼容性说明及未来发展趋势,旨在帮助用户掌握JMP脚本语言的强大功能,提升数据分析的自动化与定制化能力。适合从初学者到高级用户的深入学习与实践参考。

flink9streamer的博客 266

【数据结构与算法】如何对快速排序进行细节优化以及实现非递归版本的快速排序?

如何进一步对快速排序进行优化提供效率?怎样非递归实现快速排序?这篇文章就能告诉你!!

君兮_的博客 754

3.4 ISIS和OSPF之间路由引入

通过以上输出可以看到OSPF的路由引入到了IS-IS中。通过以上输出可以看到ISIS的路由没有传递给OSPF。通过以上输出可以看到OSPF的路由没有传递给ISIS。通过以上输出可以看到ISIS的路由被引入进了OSPF。掌握在IS-IS中引入OSPF路由的方法。掌握在OSPF中引入IS-IS路由的方法。图3-3:ISIS和OSPF之间路由引入。在R3上把ISIS的路由引入到OSPF。OSPF引入外部路由的缺省度量值为1。在R3上把OSPF的路由引入到ISIS。引入的外部路由类型为Type2。

lwljh134的博客 1802

深入理解快速排序以及优化方式

可能经常看面经的同学都知道,面试所遇到的排序算法,快速排序占主要位置,热度只增不减啊,其次就是归并和堆排序。 其实以前写过一篇排序的文章,写的比较简单,只是轻描淡写。今天我再次重新拿起笔,将快速排序的几大优化,再次一一讲述一遍。各位同学,读完这篇文章,如若对你能够带来一些感悟,记得给个大大的赞哦!!! 前言 快速排序是在冒泡排序的基础之上,再次进行优化得来的。具体的步骤如下: 在待排序的序列中,选取一个数值,将大于它的数放到数组的右边,小于它的数放到数组的左边,等于它的数就放到数组的中间。 此时,相对于

x0919的博客 997

YOLO26-seg分割优化:卷积魔改 | 动态蛇形卷积(Dynamic Snake Convolution),实现暴力涨点 | ICCV2023

​​​​​​摘要:本研究对Ultralytics YOLO26进行了全面分析,重点阐述了其关键架构改进及其在实时边缘目标检测中的性能基准测试。YOLO26于2025年9月发布,是YOLO系列最新、最先进的成员,专为在边缘及低功耗设备上实现高效、精确且易于部署的目标而构建。本文依次详述了YOLO26的架构创新,包括:移除了分布焦点损失(DFL);采用端到端的无NMS推理;集成了渐进损失(ProgLoss)与小目标感知标签分配(STAL);以及引入了用于稳定收敛的MuSGD优化器。

①答疑群聊服务;②YOLO大模型知识问答系统;③计算机视觉论文生成智能体; 214

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

快速排序三种版本详解以及代码(经典版)适合深入学习

快速排序法 深入学习版 说明快速排序法(quick sort)是目前所公认最快的排序方法之一(视解题的对象而定),虽然快速排序法在最差状况下可以达O(n2),但是在多数的情况下,快速排序法的效率表现是相当不错的。 快速排序法的基本精神是在数列中找出适当的轴心,然后将数列一分为二,分别对左边与右边数列进行排序,而影响快速排序法效率的正是轴心的选择。 这边所介绍的第一个快速排序法版本,是在多数的教科书上所提及的版本,因为它最容易理解,也最符合轴心分割与左右进行排序的概念,适合对初学者进行讲解。 解法这边所

weixin_51634706的博客 534

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

快速排序算法的几种版本及实现

写在前面的话         最近系统地学习了快速排序算法,在此作一笔记。主要包括快排的各种版本:普通版本,改进的普通版本,随机化版本,三数值取中分割版本和Stooge版本。对各版本进行了简要分析,并给出了具体实现。 《算法导论》对快排的描述         快速排序是基于分治模式的,下面是对一个典型子数组A[p..r]排序的分治过程的三个步骤:         分解:数组A[p..r]被

meng_hongwei的专栏 661

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

快速排序进阶

三月不练手生。翻出了以前写的快速排序、单链表快排和scala快排。老老实实写把基础版写对就足够。 本文代码均经过测试。 1,快速排序的C++写法: #include <iostream> #include <vector> #include <algorithm> using namespace std; int getPartition(int arr[], int low, int high) { int key = arr[low]; while(low &

rover 287

快速排序

1.数组中的元素为0或1时返回 2.选取枢纽元素pivot 3.将数组S分成两个不相交的集合。切分:大于pivot的元素在左边,小于pivot的元素在右边。 4.对[lo, pivot - 1] 区间内的数组排序,排序pivot,排序[pivot + 1,hi]数组。 收益:类似归并排序,只不过快速排序是先切分,再递归;而归并排序则是向递归,在合并。 inline static void swap...

qq_44709743的博客 269

快速排序及其优化

算法简介是一种分治的排序算法,特点就是快,而且效率高。基本思路通过一趟排序将待排元素分隔成独立的两部分,其中一部分元素的关键字均比另一部分的关键字小,然后分别对这两部分元素继续进行排序,以达到整个序列有序。 Q:对比归并排序,有何异同? A:快速排序和归并排序是互补的:归并排序是将数组分成两个子数组分别排序,并将有序的子数组归并以整个数组排序;而快速排序是当两个子数组都有序时,整个数组也就

TinyDolphin的博客 1240

python、Java 快速排序

python3快速排序 #算法导论中的快排 #理解 i:首先划分为 前段 + 后段 (这时候没有pivot) #i 指向 前段的最后一个元素 #i+1 指向 后段的第一个元素 #前段都是小于等于 pivot,后段都是大于pivot def partition(a,low,high): x=...

weixin_39666736的博客 837
上一篇: 一周刷爆LeetCode 学习笔记(1)
下一篇: 堆排序堆排序堆排序
cuilll
博客等级 码龄15年 52粉丝 214原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值