算法——B/排序

一、冒泡排序

A.冒泡思想

        冒泡排序的思想是每次将最大的一下一下运到最右边,然后将最右边这个确定下来,再来确定第一大的,再确定第三大……

        对于数组a[ ],具体的来说,每次确定操作就是从左往右扫描,如果a[i]>a[i +1],我们就执行swap(a[i],a[i+1])将两项交换,然后再往右检查,这样可以找出最大的并将其丢到最右边。

        第一次确定操作是将a[1]~a[n]中最大的放到a[n];第二次确定操作是将a[1]~a[n-1]中最大的放到a[n-1]。依此类推(类似地,如果你想先把最小的放到左边也是可以的)时间复杂度为O(n^2)。由于排序过程中,数字像冒泡泡一样从左往右换过去,故名冒泡排序。

B.冒泡实现

        冒泡排序一般用双重循环来实现。在这里 i 表示每次操作的右边界,也是存放当前操作最大值的位置。虽然 j 的范围是到 i-1,实际上 j+1 会到 i,所以可以使得操作是正确的。

二、选择排序

A.选择思想

        选择排序的思想和冒泡排序类似,是每次找出最大的然后直接放到右边对应位置,然后将最右边这个确定下来(而不是一个一个地交换过去)再来确定第二大的、第三大的……对于数组a[ ],具体来说,每次确定操作(假设当前要确定的是i位置)就是从左往右扫描计算出最大元素的下标max_id,最后执行一次swap(a[max_id],a[])将两项交换即可。

第一次确定操作是将a[1]~a[n]中最大的放到a[n];

第二次确定操作是将a[1]~a[n-1]中最大的放到a[n-1]。

依此类推(类似地,如果你想先把最小的放到左边也是可以的),时间复杂度为O(n^2)。

B.选择排序实现

选择排序一般用双重循环来实现。
max_id表示最大元素的下标。
这里要注意的细节是j的范围是[1,i],
而在冒泡排序中j的范围是[1,i-1]

三、插入排序

A.插入思想

        插入排序是一种简单直观的排序算法,其基本思想是将待排序的元素逐个插入到已排序序列的合适位置中,使得已排序序列逐渐扩大,从而逐步构建有序序列,最终得到完全有序的序列。
它类似于我们打扑克牌时的排序方式,将一张张牌插入到已经有序的手牌中时间复杂度为O(n^2)。

B.插入排序的实现

        插入排序一般用双重循环来实现:初始时我们认为长度为1的数组a[1]是有序的(显然)然后将a[2]插入到合适的位置,使得a[1~2]有序,然后将a[3]插入,使得a[1~3]有序….直至a[1~ n]有序。

四、快速排序

A.快排思想

        快速排序是一种基于分治法的排序方法,原理是将一个数组分成两个子数组,其中一个子数组的所有元素都小于另一个子数组的元素然后递归地对这两个子数组进行排序。
        快速排序的思想是通过不断地将数组分成两个子数组,递归地对子数组进行排序,最终得到一个有序的数组。这个过程通过选择合适的基准和分区操作来实现。
快速排序拥有更好的时间复杂度Q(n log n),且不需要额外空间。

五、归并排序

A.归排思想

归并排序和快速排序类似,也是一种基于分治法的排序方法。
原理是将一个数组分成两个子数组,将子数组向下递归的排序后(当数组中仅有一个元素时无需再排序,直接返回)得到两个有序数组,然后进行O(n)的合并,最终合并成有序的原数组。
快速排序拥有较好的时间复杂度O(nlogn),但需要额外的空间用于合并数组O(n)。

六、桶排序

        桶排序(Bucket sort)是一种非比较的排序算法。桶排序采用了一些分类和分治的思想,把元素的值域分成若干段,每一段对应一个桶。在排序的时候,首先把每一个元素放到其对应的桶中,再对每一个桶中的元素分别排序,再按顺序把每个桶中的元素依次取出,合并成最终答案。

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

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

相关文章

详解跨域(JSONP和CORS)

一、同源策略 同源策略(Same Origin Policy): 同源是指域名,协议,端口完成一致,那么这两个url就是同源。同源策略是一种约定,它是浏览器最核心也最基本的安全功能,也是浏览器故意设置的一个功能限制。如果缺少了同源策…

【开源】JAVA+Vue+SpringBoot实现就医保险管理系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 科室档案模块2.2 医生档案模块2.3 预约挂号模块2.4 我的挂号模块 三、系统展示四、核心代码4.1 用户查询全部医生4.2 新增医生4.3 查询科室4.4 新增号源4.5 预约号源 五、免责说明 一、摘要 1.1 项目介绍 基于JAVAVue…

酷开系统 | 酷开科技智慧AI带你领略神奇的世界

在这个科技日新月异的时代,AI已成为我们生活中不可或缺的一部分。它不仅改变了我们的生活方式,更让我们对未来充满期待。说起酷开系统中智慧AI的强大,着实让人叹为观止。无论是语音识别、数据整理还是语言处理,智慧AI都在不断地突…

MySQL数据库①_MySQL入门(概念+使用)

目录 1. 数据库的概念 1.1 数据库的存储介质 1.2 主流数据库 2. MySQL的基本使用 2.1 链接数据库 2.2 服务器管理 2.3 数据库,服务器和表关系 2.4 简单MySQL语句 3. MySQL架构 4. SQL分类 5. 存储引擎 本篇完。 1. 数据库的概念 数据库是按照数据结构来…

交换机 路由器 网卡 MAC

1. 交换机 (Switch): 交换机是一种局域网设备,用于连接多台计算机和其他网络设备。与集线器不同,交换机能够学习和记忆设备的MAC地址,并且只将数据包发送到目标设备,提高了网络的效率和性能。 逐层转发 (Layer 2 Switching): 交换…

测试大佬是怎么看待测试用例设计的

前言 最近干的最多的事情就是设计测试用例、评审测试用例了,于是我不禁又想到了一个经典的问题:如何设计出优秀的测试用例? 可能有些童鞋看到这个问题会有些不以为然,这有什么好想的?干个测试谁还不会设计测试用例&…

C++(10)——类与对象(最终篇)

目录 static成员 概念 特性 友元 友元函数 友元类 内部类 匿名对象 经过这么多天的分享,C的类与对象终于要结束了。结束也意味着C快要入门了。 static成员 概念 声明为static的类成员称为类的静态成员,用static修饰的成员变量,称之…

mysql二叉树排序例子

⼆叉排序树,理想情况下是⼆分,可能创建时⽐较深,和⼀条线差不多,性能并不⾼。 如果你想在 MySQL 中实现二叉树的排序,一种常见的方法是使用递归查询。以下是一个简单的例子,展示如何对一个具有父子关系的二…

放空自己和终端的clear

clear 造物无言却有情,每于寒尽觉春生。 张维屏《新雷》 没有啥说的,就是放空一下自己,也清空一下终端,仅此而已。 $ clear

基于YOLOv8算法的照片角度分类项目实践

目录 一、任务概述二、YOLOv8算法简介2.1 算法改进2.2 算法特点2.3 网络结构2.4 性能比较 三、工程实践3.1 安装算法框架库ultralytics3.2 库存照片预处理3.2.1 提取所有图片3.2.2 去除冗余的相同照片3.2.3 去除无车辆照片3.2.4 随机提取指定数量的图片 3.3 照片朝向分类3.3.1 …

STM32--USART串口(2)串口外设

一、USART简介 可配置数据位:不需要校验就是8位,需要校验就选9位; 停止位:决定了帧的间隔; STM32F103C8T6USART:USART1挂载在APB2总线上,USART2和USART3挂载在APB1总线上; 二、USART框图 TXE…

excel给数据库初始化/旧数据处理(自动sql拼装)

思路: 首先导出数据到excel编写单条数据操作的sql利用excel CONCATENATE 函数自动生成,每一行数据的操作sql 小技巧:对于需要套娃的字段值,可以加一个临时列同样使用CONCATENATE函数进行sql拼装 案例: 1.临时列:CONCATENATE(C2, …

分库分表 21 条法则,hold 住!

大家好~今天给大家分享分库分表的 21 条法则 我们结合具体业务场景,以t_order表为例进行架构优化。由于数据量已经达到亿级别,查询性能严重下降,因此我们采用了分库分表技术来处理这个问题。具体而言,我们将原本的单库…

【Python小游戏】五子棋小游戏(完整代码)

文章目录 写在前面Tkinter简介五子棋小游戏游戏介绍程序设计运行结果注意事项写在后面写在前面 本期内容:基于tkinter开发一个五子棋小游戏 实验环境 python3.11及以上pycharmtkinterTkinter简介 Tkinter是Python中最常用的图形用户界面(GUI)库之一,用于创建窗口、对话框…

如何搭建私有云盘SeaFile并实现远程访问本地文件资料

🌈个人主页: Aileen_0v0 🔥热门专栏: 华为鸿蒙系统学习|计算机网络|数据结构与算法 ​💫个人格言:“没有罗马,那就自己创造罗马~” #mermaid-svg-hsDnDEybLME85dTx {font-family:"trebuchet ms",verdana,arial,sans-serif;font-siz…

Web项目利用OSS进行图像存储服务

一、OSS介绍 在Web项目中,一些常见的功能,比如展示图片,修改头像等,都需要进行图片的上传操作,但是如果是存储在Web服务器中,在读取图片的时候会占用比较多的资源,影响服务器的性能。 常…

【数据结构】双向带头循环链表实现及总结

简单不先于复杂&#xff0c;而是在复杂之后。 文章目录 1. 双向带头循环链表的实现2. 顺序表和链表的区别 1. 双向带头循环链表的实现 List.h #pragma once #include <stdio.h> #include <assert.h> #include <stdlib.h> #include <stdbool.h>typede…

fastDFS客户端实现文件上传

一、准备工作 请确保fastDFS的tracker服务和storage服务都是处于启动状态&#xff0c;防火墙是关闭的&#xff1b; 二、具体步骤 1、pom.xml 2、让当前的微服务成为fdfs的客户端 package com.qf.config;import com.github.tobato.fastdfs.FdfsClientConfig; import org.sprin…

爬虫工作量由小到大的思维转变---<第四十三章 Scrapy Redis mysql数据连通问题(2)>

前言: 接上一章的爬虫工作量由小到大的思维转变---&#xff1c;第四十一章 Scrapy Redis 转mysql数据连通问题&#xff1e;-CSDN博客 这一章主要是讲关于多机连上sql要注意的问题! 正文: 会遇到哪些问题: 数据重复写入&#xff1a;当多个Scrapy-Redis实例同时运行并将数据写…

直播相关——腾讯直播SDK(一)

梳理了下项目中使用的腾讯直播SDK相关&#xff0c;为再接入一套声网RTC SDK做些准备工作。 1.sdk集成 dependencies {implementation com.tencent.liteav:LiteAVSDK_Professional:latest.release }初始化与摄像头推流相关 初始化与摄像头推流相关 2.给 SDK 配置 License 授…