数据结构—排序

本篇主要介绍这八大排序,这八大排序是数据结构篇非常重要的内容,虽然看起来很多,我一开始也是这样感觉,但是自己尝试复现后,感觉也没有那么难,相信大家也可以的!!!

1、插入排序

(1)直接插入排序 O(N)~O(N^2)

基本思想:把待排序的数据按其数据值的大小逐个插入到一个已经排好序的有序序列中,直到所有的数据被插入完为止,得到一个新的有序序列

<1>具体介绍与过程

<2>代码实现

(2)希尔排序 O(N^1.3)

基本思想:希尔排序法又称缩小增量法;先选定一个整数(通常是gap=n/3+1),把待排序数据分成各组,所有距离相等的数据分在同一组内,并对每一组内的数据进行排序,然后gap=gap/3+1得到下一个整数,再将数组分成各组,进行插入排序,当gap=1时,相当于直接插入排序

<1>具体介绍与过程

<2>代码实现

2、选择排序

(1)直接选择排序 O(N^2)

基本思想:每一次从待排序的数据元素中选出最小和最大的一个元素,存放在序列的起始/末尾位置,直到全部待排序元素排完

<1>具体介绍与过程

<2>代码实现

(2)堆排序

基本思想:是指利用堆积树这种数据结构所设计的一种排序算法,它是选择排序的一种;它是通过堆来进行选择排序;需要注意的是排升序要建大堆,排降序建小堆

<1>具体介绍和过程

<2>代码实现

3、交换排序

(1)快速排序(递归版本)

基本思想:是一种二叉树结构的交换排序方法;任取待排序的元素序列中的某元素作为基准值,按照该排序码将待排序集合分割成两子序列,左子序列中所有元素均小于基准值,右子树列中所有元素均大于基准值,然后最左右子序列重复该过程,直到所有元素都排列在相应位置上为止

<1>具体介绍和过程

<2>代码实现

(2)快速排序(非递归版本)

基本思想:借助数据结构------栈;

<1>具体介绍和过程

<2>代码实现

(3)冒泡排序

基本思想:冒泡排序是一种最基础的交换排序(具有教学意义);之所以叫做冒泡排序,因为每一个元素都可以像一个小气泡一样,根据自身大小一点一点向数组的一侧移动

<1>具体介绍和过程

<2>代码实现

4、归并排序

(1)归并排序

基本思想:采用分治法的一个非常典型的应用;将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段有序;若将两个有序表合并成一个有序表,称为二路归并

<1>具体介绍和过程

<2>代码实现

5、不比较排序

(1)计数排序

基本原理:计数排序又称为鸽巢原理,是对哈希直接定址法的变形应用

1)统计相同元素出现次数

2)根据统计的结果将序列回收到原来的序列中

<1>具体介绍和过程

<2>代码实现

相关推荐
大熊背8 分钟前
基于人眼视觉特性的相关图像增强基础知识介绍
人工智能·算法·计算机视觉
啊阿狸不会拉杆39 分钟前
《算法导论》第 12 章 - 二叉搜索树
数据结构·c++·算法·排序算法
范特西_1 小时前
不同的子序列-二维动态规划
算法·动态规划
花开富贵ii1 小时前
代码随想录算法训练营第三十八天、三十九天|动态规划part11、12
java·数据结构·算法·leetcode·动态规划
惊骇世俗王某人3 小时前
MySQL数据库索引及底层数据结构
数据结构·数据库·mysql
HW-BASE6 小时前
《C语言》指针练习题--1
c语言·开发语言·单片机·算法·c
泽虞7 小时前
数据结构与算法
c语言·数据结构·算法
max5006008 小时前
深度学习的视觉惯性里程计(VIO)算法优化实践
人工智能·深度学习·算法
岁忧8 小时前
(nice!!!)(LeetCode 每日一题) 3363. 最多可收集的水果数目 (深度优先搜索dfs)
java·c++·算法·leetcode·go·深度优先
shenghaide_jiahu9 小时前
数学建模——粒子群算法
算法·数学建模