使用快速排序算法对列表进行排序——Leetcode系列(四)

LeetCode-多语言实现快速排序以及算法优化改进 快速排序是一种高效的分治排序算法,通过选取基准元素将序列分为两部分递归排序,平均时间复杂度为O(nlogn)。其特点包括原地排序(空间复杂度O(logn))、不稳定性和实际应用中的高效性。经典实现包含分区操作和递归调用,可用最左侧元素作为基准。优化后的Java代码展示了完整的排序流程,包括分区函数、递归排序和数组打印功能,适用于处理大规模数据排序任务。 阅读详情

Sort a linked list in O(n log n) time using constant space complexity.

My Answer:

/**
 * Definition for singly-linked list.
 * class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode(int x) {
 *         val = x;
 *         next = null;
 *     }
 * }
 */
public class Solution {
    public ListNode sortList(ListNode head) {
        if(head == null){
            return head;
        }
        ListNode pivot = head;
        ListNode pre = null;
        ListNode first = null;
        ListNode last = null;
        pivot = head;
        while(pivot != null){
            if(pivot.val < head.val){
                pre.next = pivot.next;
                pivot.next = first;
                first = pivot;
                pivot = pre;
            }else if(pivot.val > head.val){
                pre.next = pivot.next;
                pivot.next = last;
                last = pivot;
                pivot = pre;
            }
            pre = pivot;
            pivot = pivot.next;
        }
        
        first = sortList(first);
        last = sortList(last);
        
        pivot = head;
        while(pivot != null){
            pre = pivot;
            pivot = pivot.next;
        }
        pre.next = last;
        if (first == null){
            return head;
        }
        pivot = first;
        while(pivot != null){
            pre  = pivot;
            pivot = pivot.next;
        }
        pre.next = head;
        return first;
    }
}

题目来源: https://oj.leetcode.com/problems/sort-list/

常用排序算法的python实现、力扣的一些排序题 list自带排序 一维 reverse = True 降序, reverse = False 升序(默认) 不需要返回值,nums就可以被修改 nums.sort(reverse = True) l = sorted(l, reverse = True) 二维 方法一 菜鸟教程上的例子: 按第二个元素排序 def takeSecond(elem): return elem[1] # 列表 random = [(2, 2), (3, 4), (4, 1), (1, 3)] # 指定第二个元 阅读详情

相关推荐

常见LeetCode排序算法

排序算法是一种通过特定的算法因式将一组或多组数据按照既定模式进行重新排序的方法。通过排序,我们可以得到一个新的序列,该序列遵循一定的规则并展现出一定的规律。经过排序处理后的数据可以更方便地进行筛选和计算,从而大大提高了计算效率。因此,掌握排序算法是每个程序员的基本功之一。今天我们将详细讲解一些与冒泡排序、快速排序和插入排序相关的leetcode真题。

xdpcxq的专栏 1120

LeetCode--快速排序

则把当前节点的数据赋值到 right 节点, 然后停止左边遍历, 开始右边遍历。则把当前节点的数据赋值到 left 节点, 然后停止右边遍历, 开始左边遍历。对左数组递归调用执行 1,2,3 步骤。对右数组递归调用执行 1,2,3 步骤。

安全新司机 1290

桶排序与快速排序算法

桶排序与快速排序算法前言桶排序leetcode164题目描述解题思路代码快速排序leetcode 75题目描述解题思路代码实现 前言 今天刷leetcode的第164题直接就蒙了,后来看了题解才发现是桶排序的东西,咱们这回把这俩排序算法一起搞定,顺便把leetcode上的相关题目ac掉。 桶排序 其实桶排序非常好理解,就是将长的序列先分成等间距的很多个桶,然后将序列元素放进各自对应的桶里,最后桶内排序,就完了。这个过程实在是太过于简单,咱们就直接上代码。 leetcode164 题目描述 给定一个无序的数组

weixin_44039270的博客 932

Leetcode刷题笔记——排序算法篇

本文给大家介绍了面试中常考的关于排序问题的算法题,本文重点介绍了计数排序、快速排序、堆排序(重点)、插入排序、归并排序(重点)、桶排序、还有自定义排序规则

qq_42898642的博客 2670

Proteus仿真AT89C51驱动DHT11:温湿度数据采集与LCD1602显示的5个调试坑点总结

本文总结了在Proteus仿真环境下使用AT89C51驱动DHT11温湿度传感器并通过LCD1602显示的5个常见调试坑点,包括DHT11时序问题、LCD1602初始化错误、数据校验失败、仿真特有差异及系统稳定性问题,提供了详细的解决方案和优化代码示例,帮助开发者高效完成温湿度采集项目。

weixin_30335575的博客 356

【Hypermesh】TetraMesh Panel 常用选项详解

结合Hypermesh 2020 帮助文档和自己的一点使用经验,整理了这个博客。

qgm1702的博客 3678

【C语言刷LeetCode】qsort库函数,刷题利器

之前刷过一些leetcode算法题,挺痛苦的,毕竟用的C语言。其中很大一部分题都是考察数组和字符串。 刷题中体会到一个经验,遇见数组先考虑排序,排序就选qsort。那现在就总结写qsort的几个不同情况。 先看下qsort的函数原型,要记住qsort的四个参数,还有compare函数的两个参数。 /*参数 base-- 指向要排序的数组的第一个元素的指针。 nitems-- 由 base ...

kinbo88的专栏 2756

逍遥模拟器改真机参数全指南:从ARM伪装到电池传感器模拟

本文提供逍遥模拟器深度伪装实战指南,重点讲解如何通过修改ARM架构、系统属性和模拟传感器数据,使其在硬件信息、电池状态等维度逼近真实设备,有效规避应用检测。文章详细介绍了使用Magisk模块、LSPosed框架进行设备指纹伪装和动态数据模拟的策略,帮助用户实现从静态信息到动态行为的全方位真机模拟。

weixin_29279101的博客 452

快速排序算法(LeetCode版)

快速排序递归框架 public static void quickSort(int[] arr) { quickSort(arr, 0, arr.length - 1); } public static void quickSort(int[] arr, int start, int end) { // 将数组分区,并获得中间值的下标 int middle = partition(arr, start, end); // 对左边区域快速排序 quickSort(a..

菼执的博客 1195

SAP 标准 CDS View 到底能不能用 CDS Extension View 扩展,我们在项目里应该这样判断

文章摘要:判断SAP标准CDS视图(如A_PRODUCT)能否扩展字段,不能仅凭命名或@Metadata.allowExtensions判断,需检查DDL源码中的@AbapCatalog.viewEnhancementCategory值。#PROJECTION_LIST允许扩展字段,#NONE则禁止。聚合视图需额外包含#GROUP_BY,UNION视图需#UNION。CDS View Extension用于新增字段,Metadata Extension仅用于添加注解。在ABAP Cloud环境中还需检查AP

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 100

【电机应用控制】——直流有刷电机&驱动板/编码器介绍&PID算法&实操代码思路

声明:学习笔记来自正点原子B站教程,仅供学习交流!!玩具车、平衡车、无人机、印刷机、打印机、手机振动马达等电机即电动机(motor),也叫作马达,电能转化为机械能。按电源:直流、交流按用途:驱动用、控制用按运转速度:高速、低速、恒速、调速直流电机(有刷、无刷)、舵机、步进电机、伺服电机1、直流有刷电机(Brushed DC Motor,简称BDC)是内含电刷装置的将直流电能转化为机械能的电动机。例如四驱赛车四个马达操控方便、成本低、维护时换电刷即可;

weixin_51658186的博客 2万+

414. 第三大的数 第二次

第三大的数 给你一个非空数组,返回此数组中 第三大的数 。如果不存在,则返回数组中最大的数。 示例 1: 输入:[3, 2, 1] 输出:1 解释:第三大的数是 1 。 示例 2: 输入:[1, 2] 输出:2 解释:第三大的数不存在, 所以返回最大的数 2 。 示例 3: 输入:[2, 2, 3, 1] 输出:1 解释:注意,要求返回第三大的数,是指在所有不同数字中排第三大的数。 此例中存在两个值为 2 的数,它们都排第二。在所有不同数字中排第三大的数为 1 。 提示: 1 <= nums.

Tzecto 826

SAP FICO 科目余额查询表开发说明书(包括测试样例、程序代码仅作参考,不保证一定可以运行)

SAP FICO 科目余额查询表开发说明书(包括开发源代码、测试样例)

我好像病了的博客 1041

leetcode 75. Sort Colors

leetcode 75. Sort Colors的两种解决思路

_TFBoy的小茶馆 314

【OpenClaw从入门到精通】第17篇:OpenClaw巨头布局实战:阿里CoPaw/腾讯云/百度/火山引擎深度拆解(2026实操版)

2026年OpenClaw以22.8万星标登顶GitHub,引发阿里、腾讯、百度、字节等互联网巨头入局角逐。本文基于公开技术文档与实测经验,深度解析四大巨头的OpenClaw布局战略:阿里云CoPaw的全栈托管、腾讯云的流量入口绑定、百度智能云的搜索生态内嵌、火山引擎的极致智力供给。从核心原理、算法构建、实操流程三个维度,提供可直接落地的接入方案,包含完整代码示例与执行结果验证。通过流程图可视化核心架构,搭配避坑指南与选型矩阵,帮助新手快速上手、进阶读者实现多厂商协同部署。

专注于人工智能、软件开发、工控自动化、工厂数字化及智能化等领域,希望和大家共同进步! 1684

多 Agent 之间如何通信和协调?OpenClaw 的 Gateway 在其中扮演什么角色?

多 Agent 之间如何通信和协调?OpenClaw 的 Gateway 在其中扮演什么角色?

我哎GIS博客 1665

算法学习笔记:12.快速排序 ——从原理到实战,涵盖 LeetCode 与考研 408 例题

快速排序是一种高效的分治排序算法,平均时间复杂度O(nlogn),通过选择基准元素将数组分为两个子数组递归排序。其核心是分区操作,常用Lomuto分区法。优化策略包括随机选择基准和三数取中法,避免最坏情况O(n²)。LeetCode例题(如912排序数组和215第K大元素)展示了实际应用。考研408常考时间复杂度分析、与其他排序算法对比等。快速排序适合处理大规模随机数据,但不稳定且对有序数组敏感,需根据场景选择合适的基准策略。

CSBIGDOG的博客 3441

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

【LeetCode力扣】75 快速排序的子过程partition(荷兰国旗问题)

75. 颜色分类 - 力扣(LeetCode)荷兰国旗问题

Hacynn的博客 1564

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

【力扣刷题实战】排序数组(快速排序算法)

文章目录目录力扣题目:排序数组题目描述解题思路问题理解算法选择具体思路解题要点完整代码(C++)兄弟们共勉 !!! 每篇前言原题链接:912. 排序数组 - 力扣(LeetCode)给你一个整数数组 ,请你将该数组升序排列。你必须在 不使用任何内置函数 的情况下解决问题,时间复杂度为 ,并且空间复杂度尽可能小。示例 1: 输入:nums = [5,2,3,1] 输出:[1,2,3,5] 示例 2: 输入:nums = [5,1,1,2,0,0] 输出:[0,0,1,1,2,5] 解题思路 问题理解

2401_85548793的博客 857

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

--力扣LeetCode--912. 排序数组(使用java快速排序)

--力扣LeetCode--912. 排序数组(使用java快速排序) 最近了解到很多面试官喜欢问快速排序的问题或者让你手撕快排,故学习了一下快速排序,并运用进力扣Leetcode的算法题中,毕竟只有自己动手实践了,才不容易忘记。也许本篇文章比较适合面向半懂快排的大佬们,因为写的不精T^T。 这里我参考了一位优快云博主名为MoreWindows写的一篇关于快排的文章,写的很白话,挺好的,大家也可...

qq_41120902的博客 1406

【算法专题】分治 - 快速排序

算法专题 --- 分治 - 快速排序

YoungMLet的博客 2535

算法 | 快速排序

颜色分类、快速排序算法、用快速排序解决 TOP K 问题(找出第K大的数、找出最小的K个数)

2301_76973016的博客 1082

快速排序算法

*快速排序(Quick Sort)**是一种基于分治法的高效排序算法,由C. A. R. Hoare于1960年提出。它的平均时间复杂度为O(n log n),在实际应用中,由于其优秀的性能和较高的效率,被认为是排序算法中的佼佼者。希望以上内容能够帮助您深入理解快速排序算法及其在力扣题目中的应用。如有疑问,欢迎继续提问!在LeetCode上,有多道题目涉及到快速排序或其应用。依此类推,最终序列有序。

liu_rockefeller的博客 1912

leetcode - 分治-三路划分快速排序总结

分治,即分而治之; 将大问题拆解为相同或者相似的子问题,然后在这个子问题额基础上继续进行划分,直到划分到某一个位置为止(该子问题可以快速解决); 其中,排序之中,快排、归并排序就是典型的分治思想;其中三路划分版本快排:首先第一步是寻找一个基准值 key , 我们目标是将数组nums 划分为三个部分,一部分小于 key , 一部分等于 key , 另一部分大于key ;这样划分之后,便不用管等于key 的区域,因为中间的这部分区域中的数据一定是到了最终合适的位置上;

Distinguished_z的博客 842

【算法题刷完这遍该会了】手撕快速排序 - 动画可视化版

最常考的排序算法,其中面试最容易考到的就是手撕快排,以及各排序算法的复杂度对比。力扣题目可以作为练手。自己做了一个可视化网页,对应代码是最下面的优化版。

南风吹梦 1524

【排序算法】快速排序详解--附详细流程代码

快速排序(Quick Sort)是一种高效的分治排序算法,由英国计算机科学家 Tony Hoare 于 1960 年提出。它是实际应用中最常用的排序算法之一。快速排序的基本思想是:选择一个"基准"(pivot)元素,通过一次排序将待排序列分割成独立的两部分,一部分所有元素均小于基准,另一部分所有元素均大于基准,然后递归地对这两部分分别进行快速排序。分治策略的运用让快速排序在平均情况下能达到 O(nlogn) 的时间复杂度,大大优于简单排序算法的 O(n²) 性能。

wufaqidong1的博客 2338
上一篇: 同一直线上最多的点的个数——Leetcode系列(三)
下一篇: 使用插入排序算法对列表进行排序——Leetcode系列(五)
Hooting
博客等级 码龄17年 11粉丝 44原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值