数据结构—排序

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

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>代码实现

相关推荐
阿豪学编程5 小时前
LeetCode724.:寻找数组的中心下标
算法·leetcode
墨韵流芳5 小时前
CCF-CSP第41次认证第三题——进程通信
c++·人工智能·算法·机器学习·csp·ccf
csdn_aspnet6 小时前
C# 求n边凸多边形的对角线数量(Find number of diagonals in n sided convex polygon)
开发语言·算法·c#
凌波粒6 小时前
LeetCode--349.两个数组的交集(哈希表)
java·算法·leetcode·散列表
paeamecium8 小时前
【PAT甲级真题】- Student List for Course (25)
数据结构·c++·算法·list·pat考试
Book思议-8 小时前
【数据结构】栈与队列全方位对比 + C 语言完整实现
c语言·数据结构·算法··队列
SteveSenna8 小时前
项目:Trossen Arm MuJoCo
人工智能·学习·算法
NAGNIP8 小时前
一文搞懂CNN经典架构-DenseNet!
算法·面试
道法自然|~8 小时前
BugCTF黄道十二宫
算法·密码学
WHS-_-20229 小时前
Python 算法题学习笔记一
python·学习·算法