数据结构与算法(Java版) | 排序算法的介绍与分类

各位朋友,现在我们即将要进入数据结构与算法(Java版)这一系列教程中的排序算法这一章节内容的学习中了,所以还请大家系好安全带,跟随我准备出发吧!

在这里插入图片描述

相信诸位应该都知道排序算法有很多种吧!就算没见过,你总该多多少少听说过那么一嘴吧!我就不信你在找工作面试时,没有碰到过一两道有关排序算法的面试题,要知道,目前很多公司都会给面试者出几道有关排序算法的笔试题,相信经常面试的人应该对此多有体会!

因此,排序算法对于我们来说,那就是一个必须要非常熟练掌握的重要知识点了。当然,不得不说的是,有些排序算法理解起来还是很困难的,并不是像你想象中的那样洒洒水就能搞明白的,所以,这里我想提醒诸位,排序算法这一章节中的内容并不是那么容易就能学会的,不过,只要你加倍努力,认真学习,我相信问题都不大,嘻嘻😂!

排序算法的基本介绍

首先,我先给大家对排序算法作一个基本的介绍。

排序也称排序算法(Sort Algorithm),指将一组数据,依照指定的顺序进行排列的一个过程。

从上可以看到,有些人将排序算法简称为排序,那也就不足奇怪了。其实,准确地来说,排序它是一种算法,并不能无脑地说它就是数据结构中的一种。

排序算法的分类

排序算法可以分为两大类,它们分别是:

  1. 内部排序

  2. 外部排序

关于排序算法的这两大分类,下面我给大家作一个简单的介绍。

内部排序

内部排序,听这个名字我想大家应该就知道它的意思了吧!何谓内部排序呢?内部排序就是指将需要处理的所有数据都加载到内部存储器(即内存)中进行排序。

说得再通俗一点就是,我们得先将需要处理的所有数据都加载到内存中,然后再在内存中完成排序。

外部排序

当数据量过大,比如要对10亿个数据进行排序,无法全部加载到内存中时,我们才需要借助外部存储来进行排序。

而这也就是说,我们可能会先加载一部分数据进行排序,排序完了过后呢,会再加载另外一部分数据进行排序,最后就是将结果进行合并了。

小结

那么,常见的排序算法有哪些呢?

常见排序算法如下图所示,是不是你只须看一眼就什么都了然了啊!

在这里插入图片描述

从上图中可以看到,这里我们会重点讲解内部排序,之所以要给大家重点讲解内部排序,是因为大家在找工作面试时,面试官着重考察你的就是内部排序。

当然,内部排序又分为下面几大类:

  • 插入排序;

    插入排序又可分为两类,如下:

    • 直接插入排序;
    • 希尔排序。
  • 选择排序;

    选择排序又可分为两类,如下:

    • 简单选择排序;
    • 堆排序。
  • 交换排序;

    交换排序又可分为两类,如下:

    • 冒泡排序;

      冒泡排序,想必大家最熟悉的就是它了,嘻嘻😂!

    • 快速排序。

  • 归并排序;

  • 基数排序。

    基数排序,又称“桶子法”,实际上它就是桶排序的一个扩展,这里我不知道大家有没有听说过桶排序,如果没听说过的话,那也没什么关系,因为只要你学会了基数排序,那桶排序自然而然也就不在话下了。

然而,对于一般程序员来讲,所谓的常见排序算法可能在他眼里就下面三种:

  • 直接插入排序;
  • 简单选择排序;
  • 冒泡排序。

以上三种排序算法也是很多培训机构或者学校要求大家伙掌握的,只不过随着时代的发展与社会的极致内卷,现在企业对咱们程序员的要求也TM被卷得越来越高了,自然就不仅仅是掌握以上三种排序算法就能完事的了,下面这八种排序算法咱们也都得掌握得非常熟练才行。

  • 直接插入排序;
  • 希尔排序;
  • 简单选择排序;
  • 堆排序;
  • 冒泡排序;
  • 快速排序;
  • 归并排序;
  • 基数排序。

温馨提示:以上这八种排序算法在我们这套系列教程里面,我都会给大家讲解到,而且讲解得会非常仔细,所以希望诸位认真学,争取努力熟练掌握它们。

以上便是我对排序算法基本介绍与分类的一个说明。

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

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

相关文章

电脑如何设置不同网段的IP地址,实现访问不同IP的PLC或HMI设备?

电脑如何设置不同网段的IP地址,实现访问不同IP的PLC或HMI设备? 电脑如何设置不同网段的IP地址,实现访问不同IP的PLC或HMI设备? 这里以win10系统为例进行说明: 如下图所示,打开右下角的“网络和Internet设置”, 如下图所示,点击进入“更改适配器选项”, 如下图所示…

Leetcode—110.平衡二叉树【简单】

2023每日刷题(十九) Leetcode—110.平衡二叉树 实现代码 /*** Definition for a binary tree node.* struct TreeNode {* int val;* struct TreeNode *left;* struct TreeNode *right;* };*/ int preFunc(struct TreeNode* root) {if(root…

leetcode-887-鸡蛋掉落(包含最大值最小化,最小值最大化的二分优化+滚动数组的原理)

这里写目录标题 题意解题KNN复杂度DP解法思想(超时)上述方法的优化 (最大值最小化二分优化)完整代码 逆向思维的DP(ksqrt(n)复杂度)代码空间优化(滚动数组)代码 题意 链接&#xff…

全球首例无液氦脑磁图辅助下的胶质瘤切除手术顺利完成

近日,在国家重点研发计划“新型无液氦脑磁图系统研发”项目支持下,首都医科大学附属北京天坛医院季楠教授团队完成全球首例无液氦脑磁图运动功能区定位辅助下的胶质瘤切除手术。 手术对一例肿瘤累及运动功能区的年轻女性在术前分别利用无液氦脑磁图仪和功…

14 _ 排序优化:如何实现一个通用的、高性能的排序函数?

几乎所有的编程语言都会提供排序函数,比如C语言中qsort(),C++ STL中的sort()、stable_sort(),还有Java语言中的Collections.sort()。在平时的开发中,我们也都是直接使用这些现成的函数来实现业务逻辑中的排序功能。那你知道这些排序函数是如何实现的吗?底层都利用了哪种排…

如何在苹果Mac系统设置中查看Wi-Fi密码?

在 Mac 上查找保存的 Wi-Fi 密码的最简单方法之一是从系统设置内的高级 Wi-Fi 首选项页面。您可以通过下面的方式访问此页面来查找您保存的 Wi-Fi 密码。 1.在 Mac 上,选取「苹果菜单」选择「系统设置」。 2.从侧边栏中选择「Wi-Fi」,单击「高级」。 3.…

【监控指标】监控系统-prometheus、grafana。容器化部署。go语言 gin框架、gRPC框架的集成

文章目录 一、监控有哪些指标二、prometheus、grafana架构Prometheus 组件Grafana 组件架构优点 三、安装prometheus和node-exporter1. docker pull镜像2. 启动node-exporter3. 启动prometheus 四、promql基本语法五、grafana的安装和使用1. 新建空文件夹grafana-storage&#…

【面试专题】设计模式篇①

1.工厂设计模式 工厂设计模式是一种创建型模式,它提供了一种创建对象的接口,但具体创建的对象类型可以在运行时决定。工厂设计模式主要解决的是创建对象的灵活性问题。 工厂设计模式主要包括简单工厂模式、工厂方法模式和抽象工厂模式三种。 简单工厂…

如何使用 SwiftUI 中新地图框架 MapKit

文章目录 前言MapKit 弃用项MapContentBuilder(iOS 17)地图交互地图样式地图控件地图相机位置总结 前言 了解 iOS 17 中的 MapKit 后,我们会发现 Apple 引入了更适合 SwiftUI 的 API。 MapKit 弃用项 一旦将你的 App 目标更新到 iOS 17&am…

宠物医院服务预约小程序的效果如何

随着养宠家庭增多及对爱宠的照顾加深,除了食品、服饰外,宠物医院近些年也迎来了较高发展,部分城市甚至聚集着众多品牌,以单店或多店品牌的方式拓展市场。 对宠物医院来说,一般都是拓展同市客户,或者多门店…

OpenFeign 的超时重试机制以及底层实现原理

目录 1. 什么是 OpenFeign? 2. OpenFeign 的功能升级 3. OpenFeign 内置的超时重试机制 3.1 配置超时重试 3.2 覆盖 Retryer 对象 4. 自定义超时重试机制 4.1 为什么需要自定义超时重试机制 4.2 如何自定义超时重试机制 5. OpenFeign 超时重试的底层原理 5…

【蓝桥杯】2023省赛H题

考察知识点:双向链表,小根堆 完整代码在文章末尾 题目 【问题描述】 给定一个长度为 N 的整数数列: A1,A2,...,AN。你要重复以下操作 K 次 :…

下载安装各种版本的Vscode以及解决VScode官网下载慢的问题

下载指定版本 在Vscode官网 Vscode官网更新子页 这里的左侧栏点击其中一个会跳转到某个版本,或者在官网子页 https://code.visualstudio.com/updates的后面跟上需要的版本号即可完成目标版本下载页面的跳转 选择Linux里的ARM包不会自动下载而是跳转到另一个页面 …

【大模型应用开发教程】04_大模型开发整体流程 基于个人知识库的问答助手 项目流程架构解析

大模型开发整体流程 & 基于个人知识库的问答助手 项目流程架构解析 一、大模型开发整体流程1. 何为大模型开发定义核心点核心能力 2. 大模型开发的整体流程1. 设计2. 架构搭建3. Prompt Engineering4. 验证迭代5. 前后端搭建 二、项目流程简析步骤一:项目规划与…

Sync Folders Pro(文件夹数据同步工具)

Sync Folders Pro for Mac 是一款功能强大的文件夹同步工具,旨在帮助用户在 Mac 计算机和移动设备之间创建双向同步。这款软件支持各种文件系统和设备,如 iPhone,iPad,iPod,Android 等。通过这款软件,用户可…

【Spring Security】Spring Security 认证过程源码分析

项目启动 我们在前面有了解到可以在application.yml中配置用户名密码,那么可以猜想:肯定是在项目启动的时候加载的,我们通过鼠标点击 进入SecurityProperties,我们在User中的getName上打断点,这样项目启动的时候就可以走到这里 之后我们通过点击:Drop Frame可以往回走进…

基于白冠鸡算法的无人机航迹规划-附代码

基于白冠鸡算法的无人机航迹规划 文章目录 基于白冠鸡算法的无人机航迹规划1.白冠鸡搜索算法2.无人机飞行环境建模3.无人机航迹规划建模4.实验结果4.1地图创建4.2 航迹规划 5.参考文献6.Matlab代码 摘要:本文主要介绍利用白冠鸡算法来优化无人机航迹规划。 1.白冠鸡…

Python爬取读书网的图片链接和书名并保存在数据库中

一个比较基础且常见的爬虫,写下来用于记录和巩固相关知识。 一、前置条件 本项目采用scrapy框架进行爬取,需要提前安装 pip install scrapy# 国内镜像 pip install scrapy -i https://pypi.douban.com/simple 由于需要保存数据到数据库,因…

安达发|APS生产排程解决五金制造企业的需求

在五金制造行业中,生产排程一直是一个非常重要的环节。然而,由于五金行业的特点和痛点,传统的生产排程方法往往难以满足企业的需求。本文将针对五金行业的痛点,探讨如何利用APS生产排程解决这些问题。 首先,我们需要了…

JAVA毕业设计109—基于Java+Springboot+Vue的宿舍管理系统(源码+数据库)

基于JavaSpringbootVue的宿舍管理系统(源码数据库)109 一、系统介绍 本系统前后端分离 本系统分为学生、宿管、超级管理员三种角色 1、用户: 登录、我的宿舍、申请调宿、报修申请、水电费管理、卫生检查、个人信息修改。 2、宿管: 登录、用户管理…