排序算法(未完)

2023-09-18 16:35:48

诸神缄默不语-个人CSDN博文目录

打算做每个算法介绍详细的思路、算法流程(PPT)、代码实现的视频。准备慢慢做。

0. 排序算法的稳定性分析

1. 插入排序/直接插入排序

类似手工排序扑克牌,每次把一个元素按顺序放到最前面顺序排好的子数组里(一开始这个子数组只有第一个元素)
在实现中一般是目标元素一步一步一边比大小一边往左挪,直到挪到顺序为止
时间复杂度 O(N^2),空间复杂度 O(1)
稳定的

1.1 希尔排序

分组进行插入排序,组数逐渐减到1
不稳定的

2. 简单选择排序

每次迭代找最小的元素,放到最前面

3. 堆排序

先建立一个无序的堆,然后迭代所有非叶节点(从最后一个开始)对每一个进行堆化(大概来说就是研究这个节点是不是该往子节点下沉,一路下沉到合适的位置上)

每次取出根节点,进行自顶向下堆化,将新的根节点放在原本最后一个节点那里的位置

4. 冒泡排序

一个指针滑,比较后一位与指针位的大小差异,如果前大后小就交换一下,总之每次都把一个最大的保送到最后一位。(可以增加flag标记,如果已经有序即无需移动,就停止下一次迭代)

5. 快速排序

每次将数字分成一大组和一小组

6. 归并排序

  1. 把整个数组拆成很多顺序的小数组(从1个数字开始),将小数组顺序合并
  2. 将两个顺序序列合并成一个顺序序列。两个序列每个放一个指针,对比元素大小,然后把小的元素放进新空间,然后指针往后走,这样一直走到一个序列被遍历完。

7. 桶排序/箱排序

分桶,对每个桶各自进行排序

8. 基数排序/分配式排序/桶子法

稳定的

O ( n log ⁡ ( r ) m ) O (n\log(r)m) O(nlog(r)m)

1. 最低位优先(Least Significant Digit first) LSD法

(这简称看起来也太容易产生误会了)

以最低位的数开始进行分配,每次分配完后再按组合并,再重新分配,直至分完所有数位

适合位数小的数列

2. 最高位优先(Most Significant Digit first) MSD法

与LSD法相反,从最高位为基底开始进行分配,每次分配之后再在分组中建立子桶进行分配,直至分到最后一位

9. 计数排序

就是非常粗暴地直接按元素放到新数组的索引里

参考资料

  1. 基数排序_百度百科
  2. JAVA之基数排序LSD顺序_lsd算法 java_二个二个二的博客-CSDN博客
更多推荐

第七天:gec6818开发板QT和Ubuntu中QT安装连接sqlite3数据库驱动环境保姆教程

sqlite3数据库简介帮助文档SQLProgramming大多数关系型数的操作步骤:1)连接数据库多数关系型数据库都是C/S模型(Client/Server)sqlite3是一个本地的单文件关系型数据库,同样也有“连接”的过程2)操作数据库作为程序员,对数据库最常见的操作就是增删改查3)关闭数据库连接也是一种资源,用

差分数组leetcode 2770 数组的最大美丽值

什么是差分数组差分数组是一种数据结构,它存储的是一个数组每个相邻元素的差值。换句话说,给定一个数组arr[],其对应的差分数组diff[]将满足:diff[i]=arr[i+1]-arr[i]对于所有0<=i<n-1差分数组的作用用于高效地实现某些特定的数组操作,如对某一范围的数组元素全部增加或减少一个固定值。例如,考

Jenkins学习笔记5

[root@localhost~]#cd/var/lib/jenkins/workspace/nginx_root_sync[root@localhostnginx_root_sync]#lltotal16-rw-r--r--1jenkinsjenkins6Sep2020:571.php-rw-r--r--1jenki

C++项目:仿mudou库实现高性能高并发服务器

文章目录一、实现目标二、前置知识(一)HTTP服务器1.概念2.Reactor模型:3.分类一、实现目标仿muduo库OneThreadOneLoop式主从Reactor模型实现高并发服务器:通过咱们实现的高并发服务器组件,可以简洁快速的完成⼀个高性能的服务器搭建。并且,通过组件内提供的不同应⽤层协议支持,也可以快速完

代码配置仓库GitLab安装部署

Github是目前世界上代码行数最多的在线软件版本配置库平台,而Gitlab是Github对应的开源版本,本文主要描述Gitlab的安装部署。https://about.gitlab.com/https://gitlab.cn/install/如上所示,从官方网站中下载不同操作系统的版本,本文主要描述Centos的安装

UML类图

优质博客:IT-BLOG-CNUML(UnidiedModelingLanguage)统一建模语言:用来设计软件的可视化建模语言,能够表达软件设计中的动态与静态信息。UML定义了用例图、类图、对象图、状态图、活动图、时序图、协作图、构件图、部署图等9种图。IDEA展示类图及类图关系【1】选中.java或者编辑的.jav

部署Kafka

kafka:kafka_2.13-3.5.1NOTE:YourlocalenvironmentmusthaveJava8+installed.ApacheKafkacanbestartedusingZooKeeperorKRaft.Togetstartedwitheitherconfigurationfollowone

MySQL 篇

目录1、数据库三范式2、数据库事务的特性3、MySQL数据库引擎4、说说InnoDB与MyISAM的区别5、索引是什么?6、索引数据结构7、MySQL索引类型有哪些?8、索引有什么优缺点?9、索引设计原则9、使用索引应该注意些什么?10、什么是视图?11、什么是内联接、左外联接、右外联接?12、说一说drop、dele

网络安全(黑客技术)自学规划

一、什么是网络安全网络安全可以基于攻击和防御视角来分类,我们经常听到的“红队”、“渗透测试”等就是研究攻击技术,而“蓝队”、“安全运营”、“安全运维”则研究防御技术。无论网络、Web、移动、桌面、云等哪个领域,都有攻与防两面性,例如Web安全技术,既有Web渗透,也有Web防御技术(WAF)。作为一个合格的网络安全工程

Caton Media Xstream: 重新定义实时内容交付服务

//编者按:随着公共互联网愈加复杂,besteffort的基本原型已无法满足越来越多的有QoS保障需求的实时内容交付服务。而专线、卫星等传统解决方案存在部署成本高、周期长等问题,无法快速响应各类需求。LiveVideoStackCon邀请到了科腾科技的魏凌,为我们介绍CatonMediaXstream平台的解决方案。文

selenium环境+元素定位大法

selenium与webdriverSelenium是一个用于Web测试的工具,测试运行在浏览器中,就像真正的用户在手工操作一样。支持所有主流浏览器WebDriver就是对浏览器提供的原生API进行封装,使其成为一套更加面向对象的SeleniumWebDriverAPI。使用这套API可以操控浏览器的开启、关闭,打开网

热文推荐