当前位置: 首页 > news >正文

排序算法---快速排序

原创不易,转载请注明出处。欢迎点赞收藏~

快速排序是一种常用的排序算法,采用分治的策略来进行排序。它的基本思想是选取一个元素作为基准(通常是数组中的第一个元素),然后将数组分割成两部分,其中一部分的所有元素小于等于基准值,另一部分的所有元素大于基准值。然后对这两部分继续递归应用快速排序算法,直到整个数组有序。

算法步骤如下:

  1. 选择基准元素。
  2. 将数组分割成两部分,使得左半部分的元素都小于等于基准值,右半部分的元素都大于基准值。
  3. 对左右两部分分别应用快速排序算法(递归)。

快速排序的时间复杂度为O(nlogn)。这是因为每次划分操作会把待排序的序列分割成两个规模大致相等的子序列,划分操作的时间复杂度为O(n),递归调用的次数为O(logn)。所以总体的时间复杂度为O(nlogn)。

快速排序的空间复杂度为O(logn)。这是因为快速排序需要使用递归来进行划分操作,每一层递归都需要额外的空间来保存分割点的位置,递归调用的次数为O(logn),所以总体的空间复杂度为O(logn)。

需要注意的是,快速排序是一种原地排序算法,它不需要额外的辅助空间来进行排序。但是在实际实现中,为了提高排序的效率和减少递归深度,通常会使用一些优化策略,比如随机选择基准元素、三数取中法等。

#include <stdio.h>// 交换函数,用于交换数组中两个元素的位置
void swap(int *a, int *b)
{int temp = *a;*a = *b;*b = temp;
}// 分割函数,用于将数组分割成左右两部分
int partition(int arr[], int low, int high)
{int pivot = arr[low]; // 选择第一个元素作为基准值int i = low, j = high;while (i < j){// 从右往左找到第一个小于基准值的元素while (i < j && arr[j] >= pivot){j--;}// 从左往右找到第一个大于基准值的元素while (i < j && arr[i] <= pivot){i++;}// 交换这两个元素的位置if (i < j){swap(&arr[i], &arr[j]);}}// 将基准值放到最终的位置swap(&arr[low], &arr[i]);return i;
}// 快速排序函数
void quick_sort(int arr[], int low, int high)
{if (low < high){// 找到分割点int pivotIndex = partition(arr, low, high);// 对分割点左右两部分进行递归排序quick_sort(arr, low, pivotIndex - 1);quick_sort(arr, pivotIndex + 1, high);}
}// 测试
int main()
{int arr[] = {8, 4, 2, 9, 5, 1, 6, 3, 7};int n = sizeof(arr) / sizeof(arr[0]);printf("排序前的数组:\n");for (int i = 0; i < n; i++){printf("%d ", arr[i]);}quick_sort(arr, 0, n - 1);printf("\n排序后的数组:\n");for (int i = 0; i < n; i++){printf("%d ", arr[i]);}putchar('\n');return 0;
}

以上示例代码演示了如何使用快速排序算法对一个整数数组进行排序。首先定义了交换函数swap用于交换数组中两个元素的位置,然后定义了分割函数partition用于将数组分割成左右两部分。 最后定义了快速排序函数quick_sort来递归地进行分割和排序。

运行示例代码后,你可以看到以下输出:

相关文章:

排序算法---快速排序

原创不易&#xff0c;转载请注明出处。欢迎点赞收藏~ 快速排序是一种常用的排序算法&#xff0c;采用分治的策略来进行排序。它的基本思想是选取一个元素作为基准&#xff08;通常是数组中的第一个元素&#xff09;&#xff0c;然后将数组分割成两部分&#xff0c;其中一部分的…...

算法||实现典型数据结构的查找、添加和删除数据 并分析其时间和空间复杂度

实现典型数据结构的查找、添加和删除数据 并分析其时间和空间复杂度 线性结构&#xff1a; 数组&#xff1a;是一种线性表数据结构&#xff0c;它用一组连续的内存空间&#xff0c;来存储一组具有相同类型的数据。 查找数据 &#xff1a;随机访问 流程图 /** 查询元素下标…...

【蓝桥杯冲冲冲】Invasion of the Milkweed G

【蓝桥杯冲冲冲】Invasion of the Milkweed G 蓝桥杯备赛 | 洛谷做题打卡day30 文章目录 蓝桥杯备赛 | 洛谷做题打卡day30[USACO09OCT] Invasion of the Milkweed G题目描述输入格式输出格式样例 #1样例输入 #1样例输出 #1 题解代码我的一些话 [USACO09OCT] Invasion of the Mi…...

【JAVA WEB】 百度热榜实现 新闻页面 Chrome 调试工具

目录 百度热榜 新闻页面 Chrome 调试工具 --查看css属性 打开调试工具的方式 标签页含义 百度热榜 实现效果&#xff1a; 实现代码 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"vi…...

Linux——动静态库

基础知识:动vs静 类型动静加载时机运行时编译时可复用性多个文件只需要加载一份库文件每个文件都需要加载一份文件性能链接次数越多越有优势链接次数越少越有优势 代码编写 静态库 生成静态库 libmath.a:add.o sub.oar -rc $ $^%.o:%.cgcc -c $<使用静态库 头文件和工…...

Vulnhub靶机:hacksudo-search

一、介绍 运行环境&#xff1a;Virtualbox 攻击机&#xff1a;kali&#xff08;10.0.2.15&#xff09; 靶机&#xff1a;hacksudo-search&#xff08;10.0.2.50&#xff09; 目标&#xff1a;获取靶机root权限和flag 靶机下载地址&#xff1a;https://download.vulnhub.co…...

Leetcode 188 买卖股票的最佳时机 IV

题意理解&#xff1a; 给你一个整数数组 prices 和一个整数 k &#xff0c;其中 prices[i] 是某支给定的股票在第 i 天的价格。 设计一个算法来计算你所能获取的最大利润。你最多可以完成 k 笔交易。也就是说&#xff0c;你最多可以买 k 次&#xff0c;卖 k 次。 注意&#xf…...

win32编程系统BUG(Win32 API中的WM_SETTEXT消息)

由于频繁使用Win32 API中的WM_SETTEXT消息&#xff0c;导致内存占用直线上升。 暂未找到有效解决方案。...

Linux防火墙开放

记录一次问题 写的网络服务无法通信 代码没问题&#xff0c;IP绑定、端口绑定没问题&#xff0c;就是无法进行通信&#xff0c;这里要分2步走。 服务器控制台开放 进入防火墙 添加规则&#xff0c;这里以开放udp的8899端口为例 这里在服务器后台就已经开放了&#xff0c;但此时…...

通过 docker-compose 部署 Flink

概要 通过 docker-compose 以 Session Mode 部署 flink 前置依赖 Docker、docker-composeflink 客户端docker-compose.yml version: "2.2" services:jobmanager:image: flink:1.17.2ports:- "8081:8081"command: jobmanagervolumes:- ${PWD}/checkpoin…...

HarmonyOS ArkTS修改App的默认加载的界面(二十)

前言&#xff1a;在Android开发中想要修改默认启动页&#xff0c;只需要在AndroidManifest.xml中设置即可 只需要在启动的activity种添加如下属性即可 <intent-filter><action android:name"android.intent.action.MAIN" /><category android:name&qu…...

【前端高频面试题--Vue基础篇】

&#x1f680; 作者 &#xff1a;“码上有前” &#x1f680; 文章简介 &#xff1a;前端高频面试题 &#x1f680; 欢迎小伙伴们 点赞&#x1f44d;、收藏⭐、留言&#x1f4ac;前端高频面试题--Vue基础篇 Vue基本原理双向绑定与MVVM模型Vue的优点计算属性与监听属性计算属性监…...

Spring Boot 实现热插拔 AOP

现在有这么一个需求:就是我们日志的开与关是交给使用人员来控制的,而不是由我们开发人员固定写死的。大家都知道可以用aop来实现日志管理,但是如何动态的来实现日志管理呢?aop源码中的实现逻辑中有这么一个步骤,就是会依次扫描Advice的实现类,然后执行。我们要做的就是自…...

2月05日,每日信息差

第一、全球首套5G及6G天地一体网络低轨试验卫星发射入轨、。据了解&#xff0c;“中国移动01星”是全球首颗可验证5G天地一体演进技术的试验卫星&#xff0c;它搭载的基站可以利用卫星的广覆盖优势把5G信号传送到地面网络无法覆盖到的地方&#xff1b;另外一颗“‘星核’验证星…...

使用Python进行数据的描述性分析,用少量的描述性指标来概括大量的原始数据

在进行数据分析时&#xff0c;当研究者得到的数据量很小时&#xff0c;可以通过直接观察原始数据来获得所有的信息。但是&#xff0c;当得到的数据量很大时&#xff0c;就必须借助各种描述性指标来完成对数据的描述工作。用少量的描述性指标来概括大量的原始数据&#xff0c;对…...

【JS逆向三】逆向某某网站的sign参数,并模拟生成仅供学习

逆向日期&#xff1a;2024.02.06 使用工具&#xff1a;Node.js 类型&#xff1a;webpack 文章全程已做去敏处理&#xff01;&#xff01;&#xff01; 【需要做的可联系我】 可使用AES进行解密处理&#xff08;直接解密即可&#xff09;&#xff1a;AES加解密工具 1、打开某某…...

移动光猫gs3101超级密码及改桥接模式教程

文章目录 超级管理员账号改桥接模式路由器连接光猫&#xff0c;PPPOE拨号即可&#xff01;附录&#xff1a;如果需要改桥接的话不知道拨号密码咋办打开光猫Telnet功能Telnet 登录 参考文章 移动光猫吉比特GS3101超级账号获取更改桥接 移动光猫gs3101超级密码及改桥接模式教程 …...

leetcode 153

153 寻找旋转排序数组中的最小值 这道题&#xff0c;如果我们熟悉数组 api&#xff0c;可以直接用 Arrays.sort()秒杀&#xff0c;这个方法使用了双轴快速排序算法。 解法1如下&#xff1a; class Solution {public int findMin(int[] nums) {Arrays.sort(nums);return nums…...

【MySQL】数据库的基础——数据库的介绍、MySQL的介绍和架构、SQL分类、MySQL的基本使用、MySQL的存储引擎

文章目录 MySQL1. 数据库的介绍1.2 主流数据库 2. MySQL的介绍2.1 MySQL架构2.2 SQL分类2.3 MySQL的基本使用2.4 MySQL存储引擎 MySQL 1. 数据库的介绍 数据库&#xff08;Database&#xff0c;简称DB&#xff09;是按照数据结构来组织、存储和管理数据的仓库。它是长期存储在计…...

后端的技术设计文档

一、 背景 1.简介 2.业务规划(非必需) 3.工作项拆解 拆解成多个工作项&#xff0c;每个工作项&#xff0c;需要多少人力。 4.资源评估(非必需) 有没有新的服务 二、架构设计 1.架构图(非必需&#xff0c;新服务比较需要) 2.技术选型 SpringCloud、Redis、Mysql、Myba…...

华为交换机Eth-Trunk配置实战:手工与LACP模式全解析(附排错指南)

华为交换机Eth-Trunk深度配置指南&#xff1a;从手工模式到LACP模式的技术实践 在企业网络架构中&#xff0c;带宽瓶颈和单点故障一直是困扰网络工程师的两大难题。记得去年参与某金融数据中心改造时&#xff0c;核心交换机之间的千兆链路在业务高峰时段频繁出现拥塞告警&#…...

解锁戴森电池3大突破:固件破解技术让32次红灯故障电池重生

解锁戴森电池3大突破&#xff1a;固件破解技术让32次红灯故障电池重生 【免费下载链接】FU-Dyson-BMS (Unofficial) Firmware Upgrade for Dyson V6/V7 Vacuum Battery Management System 项目地址: https://gitcode.com/gh_mirrors/fu/FU-Dyson-BMS 当你的戴森吸尘器突…...

ai赋能安装:让快马生成智能交互式mysql安装故障排查助手

AI赋能安装&#xff1a;让快马生成智能交互式MySQL安装故障排查助手 MySQL作为最流行的开源数据库之一&#xff0c;安装过程看似简单&#xff0c;但实际会遇到各种"坑"。新手经常被报错信息搞得一头雾水&#xff0c;老手也可能在特定环境下翻车。传统教程都是静态的…...

百川2-13B-4bits模型微调实战:用OpenClaw日志数据提升任务理解力

百川2-13B-4bits模型微调实战&#xff1a;用OpenClaw日志数据提升任务理解力 1. 为什么需要针对OpenClaw任务做模型微调 去年夏天&#xff0c;当我第一次尝试用OpenClaw自动化处理日常工作报告时&#xff0c;发现一个有趣的现象&#xff1a;当我直接说"帮我整理上周的销…...

Wan2.1-UMT5开发环境搭建:Node.js后端服务与前端交互配置

Wan2.1-UMT5开发环境搭建&#xff1a;Node.js后端服务与前端交互配置 如果你正在折腾Wan2.1-UMT5的WebUI&#xff0c;想自己搞点后端服务&#xff0c;或者想扩展它的功能&#xff0c;比如加个状态查询、做个回调通知&#xff0c;那你来对地方了。很多朋友卡在环境配置这一步&a…...

三大AI-IDE实战:如何用OneCode注解快速生成电商后台管理系统(附避坑指南)

三大AI-IDE实战&#xff1a;如何用OneCode注解快速生成电商后台管理系统&#xff08;附避坑指南&#xff09; 电商后台管理系统作为企业数字化转型的核心枢纽&#xff0c;其开发效率直接影响业务迭代速度。传统开发模式下&#xff0c;表单、列表、权限等模块的重复编码消耗了团…...

AI头像生成器与SpringBoot集成实战:企业级应用开发指南

AI头像生成器与SpringBoot集成实战&#xff1a;企业级应用开发指南 你有没有想过&#xff0c;为什么现在很多电商平台的新用户注册后&#xff0c;头像都那么有个性&#xff0c;而且风格还挺统一&#xff1f;这背后其实不是设计师在加班加点&#xff0c;而是AI头像生成器在默默…...

PP-DocLayoutV3跨平台文档处理方案:兼容Windows、Linux与macOS

PP-DocLayoutV3跨平台文档处理方案&#xff1a;兼容Windows、Linux与macOS 最近在折腾文档智能处理&#xff0c;发现了一个挺有意思的模型服务——PP-DocLayoutV3。简单来说&#xff0c;它能帮你自动分析文档图片&#xff0c;把里面的文字、表格、图片、标题什么的&#xff0c…...

深入解析UFS Clk Gate机制及其在低功耗设计中的应用

1. UFS Clk Gate机制入门指南 第一次听说UFS Clk Gate时&#xff0c;我也是一头雾水。直到在某个凌晨三点调试手机耗电问题时&#xff0c;才真正理解它的价值。简单来说&#xff0c;这就像你家里空调的智能开关——没人在房间时自动关闭&#xff0c;有人进来又立即开启&#xf…...

SpringBoot+Vue物流管理系统源码+论文

代码可以查看文章末尾⬇️联系方式获取&#xff0c;记得注明来意哦~&#x1f339; 分享万套开题报告任务书答辩PPT模板 作者完整代码目录供你选择&#xff1a; 《SpringBoot网站项目》1800套 《SSM网站项目》1500套 《小程序项目》1600套 《APP项目》1500套 《Python网站项目》…...