数据结构 -- 交换排序(冒泡排序和快速排序)

冒泡排序

基于“交换”的排序:根据序列中两个元素关键字的比较结果来对换这两个记录在序列中的位置

//交换
void swap(int &a,int &b){int temp = a;a = b;b = temp;
}//冒泡排序
void BubbleSort(int A[],int n){for(int i=0;i<n-1;i++){bool flag = false;			//表示本趟冒泡是否发生交换的标志for(int j = n-1;j>i;j--)if(A[j-1]>A[j]){swap(A[j-1],A[j]);flag = true;}if(flag == false)	return ;		//本趟遍历后没有发生交换,说明表已经有序}
}
算法性能分析

在这里插入图片描述

是否适用于链表?

适用,可从前往后“冒泡”,每⼀趟将更⼤的元素“冒”到链尾

在这里插入图片描述

快速排序

算法思想

在这里插入图片描述

image-20250513113311757
//用第一个元素将待排序元素划分为左右两个部分
int Partition(int A[],int low,int high){int pivot = A[low];while(low<high){while(low<high&&A[high]>=pivot)	--high;A[low] = A[high];while(low<high&&A[low]<=pivot)	++low;A[high] = A[low];}A[low] = pivot;return low;
}//快速排序
void QuickSort(int A[],int low,int high){if(low<high){int pivotpos = Partition(A,low,high);QuickSort(A,low,pivotpos);QuickSort(A,pivotpos,high);}
}
算法效率分析

时间复杂度=O(n*递归层数)

空间复杂度=O(递归层数)

在这里插入图片描述
在这里插入图片描述

时间复杂度空间复杂度
最好O(nlog2n)O(log2n)
最坏O(n2)O(n)

若每⼀次选中的“枢轴”将待排序序列划分为很不均匀的两个部分,则会导致递归深度增加,算法效率变低

若初始序列有序或逆序,则快速排序的性能最差(因为每次选择的都是最靠边的元素)

若每⼀次选中的“枢轴”将待排序序列划分为均匀的两个部分,则递归深度最⼩,算法效率最⾼

快速排序算法优化思路:尽量选择可以把数据中分的枢轴元素。

eg:①选头、中、尾三个位置的元素,取中间值作为枢轴元素;②随机选⼀个元素作为枢轴元素

在这里插入图片描述

注:408原题中说,对所有尚未确定最终位置的所有元素进行⼀遍处理称为“⼀趟”排序,因此⼀次“划分”≠⼀趟排序。

⼀次划分可以确定⼀个元素的最终位置,而⼀趟排序也许可以确定多个元素的最终位置。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.pswp.cn/diannao/84233.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

多模态AI终极形态?GPT-5与Stable Diffusion 3的融合实验报告

多模态AI终极形态&#xff1f;GPT-5与Stable Diffusion 3的融合实验报告 系统化学习人工智能网站&#xff08;收藏&#xff09;&#xff1a;https://www.captainbed.cn/flu 文章目录 多模态AI终极形态&#xff1f;GPT-5与Stable Diffusion 3的融合实验报告摘要引言技术架构对…

ajax中get和post的区别,datatype返回的数据类型有哪些?

GET 请求 和 POST 请求 是 HTTP 协议中常用的两种请求方法&#xff0c;它们主要的区别在于&#xff1a; GET 请求&#xff1a; 数据传输方式&#xff1a;数据通过 URL 传递&#xff0c;通常是附加在 URL 后面的查询字符串中&#xff0c;例如 https://example.com/page?nameJoh…

101 alpha_59

(0 - (1 * (rank((sum(returns, 10) / sum(sum(returns, 2), 3))) * rank((returns * cap))))) 0 - (1 * A * B) A rank((sum(returns, 10) / sum(sum(returns, 2), 3)))B rank((returns * cap)) sum(returns, 10)&#xff1a;计算过去 10 期收益率的总和sum(returns, 2)&…

vscode里几种程序调试配置

标题调试python嵌入的c代码,例如 import torch from torch.utils.cpp_extension import loadtest_load load(nametest_load, sources[test.cpp],extra_cflags[-O0, -g],#extra_cflags[-O1],verboseTrue, ) a torch.tensor([1, 2, 3]) b torch.tensor([4, 5, 6]) result te…

深入解析MySQL中的HAVING关键字:从入门到实战

引言 在SQL查询中&#xff0c;数据过滤是核心操作之一。我们常用WHERE子句进行行级过滤&#xff0c;但当需要对分组后的结果进行条件筛选时&#xff0c;HAVING关键字便成为不可或缺的工具。本文将深入探讨HAVING的作用、使用场景及其与WHERE的区别&#xff0c;并通过实际案例帮…

根据YOLO数据集标签计算检测框内目标面积占比(YOLO7-10都适用)

程序&#xff1a; 路径改成自己的&#xff0c;阈值可以修改也可以默认 #zhouzhichao #25年5月17日 #计算时频图中信号面积占检测框面积的比值import os import numpy as np import pandas as pd from PIL import Image# Define the path to the directory containing the lab…

AI神经网络降噪 vs 传统单/双麦克风降噪的核心优势对比

1. 降噪原理的本质差异 对比维度传统单/双麦克风降噪AI神经网络降噪技术基础基于固定规则的信号处理&#xff08;如谱减法、维纳滤波&#xff09;基于深度学习的动态建模&#xff08;DNN/CNN/Transformer&#xff09;噪声样本依赖预设有限噪声类型训练数据覆盖数十万种真实环境…

了解Android studio 初学者零基础推荐(3)

kotlin中的数据类及对象 使用泛型创建可重复使用的类 我们将常在线答题考试&#xff0c;有的考试题型包括判断&#xff0c;或者填空&#xff0c;以及数学题&#xff0c;此外试题内容还包括难易程度&#xff1a;"easy”,"medium"&#xff0c;"hard",…

【占融数科-注册/登录安全分析报告】

前言 由于网站注册入口容易被黑客攻击&#xff0c;存在如下安全问题&#xff1a; 暴力破解密码&#xff0c;造成用户信息泄露短信盗刷的安全问题&#xff0c;影响业务及导致用户投诉带来经济损失&#xff0c;尤其是后付费客户&#xff0c;风险巨大&#xff0c;造成亏损无底洞…

记录一次请求数据很慢的灾难

起因&#xff1a; 因公司业务需要&#xff0c;对接了一个平台的 api。对接完成之后&#xff0c;发现只要打开开关&#xff0c;就别的接口就访问很慢&#xff0c;出现 gatway time out。 排查&#xff1a; 先看下主服务器和 slave 服务器的状态&#xff1a; 主服务&#xff…

力扣-将x减到0的最小操作数

1.题目描述 2.题目链接 1658. 将 x 减到 0 的最小操作数 - 力扣&#xff08;LeetCode&#xff09; 3.题目分析 1&#xff09;正面求解困难 题目要求我们每次都从最左边或者最右边取一个数&#xff0c;使x-元素的值&#xff0c;并在数组中移除该元素。最后返回的最小操作数…

排序复习/上(C语言版)

目录 1.排序概念 2.冒泡排序 效率性能测试代码&#xff1a; 性能分析&#xff1a; 3.直接插入排序 单趟&#xff1a; 整体&#xff1a; 性能分析&#xff1a; 4.希尔排序&#xff08;基于插入排序的优化&#xff09; 单趟单组&#xff1a; 单趟多组&#xff1a; 降低…

程序编辑器快捷键总结

程序编辑器快捷键总结 函数跳转 函数跳转 Creator : F2VSCode : F12visual Studio : F12

【LUT技术专题】极小尺寸LUT算法:TinyLUT

TinyLUT: Tiny Look-Up Table for Efficient Image Restoration at the Edge&#xff08;2024 NeurIPS&#xff09; 专题介绍一、研究背景二、TinyLUT方法2.1 Separable Mapping Strategy2.2 Dynamic Discretization Mechanism 三、实验结果四、总结 本文将从头开始对TinyLUT: …

解决:VMware 虚拟机 Ubuntu 系统共享文件夹无法访问问题

以下是解决 VMware 虚拟机 Ubuntu 系统共享文件夹无法访问 问题的完整过程总结&#xff0c;按关键步骤和逻辑顺序梳理&#xff1a; 系统版本&#xff1a;Ubuntu 22.04.5 1. 确认 VMware Tools 已安装 验证方法&#xff1a;通过 ps -ef | grep vmtoolsd 检查是否存在 vmtools…

YOLOv8 的双 Backbone 架构:解锁目标检测新性能

一、开篇&#xff1a;为何踏上双 Backbone 探索之路 在目标检测的领域中&#xff0c;YOLOv8 凭借其高效与精准脱颖而出&#xff0c;成为众多开发者和研究者的得力工具。然而&#xff0c;传统的单 Backbone 架构&#xff0c;尽管已经在诸多场景中表现出色&#xff0c;但仍存在一…

k8s网络架构

Kubernetes 网络架构的设计目标是为 Pod 提供一个高效、灵活且可扩展的网络环境&#xff0c;同时确保 Pod 之间的通信简单直接&#xff0c;类似于在同一个物理网络中。以下是 Kubernetes 网络架构的原理和核心组件的详细解析&#xff1a; 一、Kubernetes 网络模型的基本原则 Ku…

C++高频面试考点 -- 智能指针

C高频面试考点 – 智能指针 C11中引入智能指针的概念&#xff0c;方便堆内存管理。这是因为使用普通指针&#xff0c;容易造成堆内存泄漏&#xff0c;二次释放&#xff0c;程序发生异常时内存泄漏等问题。 智能指针在C11版本之后提供&#xff0c;包含在头文件<memory>中…

JavaScript关键字完全解析:从入门到精通

前言 JavaScript作为目前最流行的编程语言之一&#xff0c;拥有丰富的关键字体系。这些关键字是语言的基础组成部分&#xff0c;理解它们的含义和用法对于掌握JavaScript至关重要。本文将详细介绍JavaScript中的所有关键字&#xff0c;包括ES6的新增关键字&#xff0c;帮助开发…

#6 百日计划第六天 java全栈学习

今天学的啥 上午 算法byd图论 图遍历dfs bfs 没学懂呵呵 找到两个良心up 图码 labuladong 看算法还好 尚硅谷讲的太浅了 那你问我 下午呢 下午 java 看了会廖雪峰的教程 回顾基础 小林coding Java基础八股文 还有集合的八股文 有的不是很懂 今天把Java基础算是完…