目录

一、数据结构的八大排序算法总结笔记:

1、常见的数据结构排序算法如下图所示:

2、常见数据结构排序算法的时间复杂度、空间复杂度、稳定性介绍如下图所示:

二、排序算法逐一介绍:

1、直接插入排序:

2、希尔排序

3、简单选择排序

4、冒泡排序

5、快速排序

6、归并排序

7、堆排序

8、基数排序

一、数据结构的八大排序算法总结笔记:

1、常见的数据结构排序算法如下图所示:

2、常见数据结构排序算法的时间复杂度、空间复杂度、稳定性介绍如下图所示:

二、排序算法逐一介绍:

1、直接插入排序:

(1)排序原理及方法:

  1. 从第一个元素开始,该元素可以认为已经被排序
  2. 取出下一个元素,在已经排序的元素序列中从后向前扫描
  3. 如果新元素小于已排序元素tmp<array[ j ],将该元素移到下一位置array[ j+1]=array[ j ]
  4. 重复步骤3 j - -,直到找到已排序的元素小于或者等于新元素的位置 array[ j ]<=tmp
  5. 将新元素tmp插入到该位置  array[ j+1] = tmp
  6. 重复步骤2~5

(2)排序方法图解:

(3)算法效率:

平均时间复杂度 最好时间复杂度 最坏时间复杂度 空间复杂度 稳定性
O(N^2) O(N)  O(N^2)  O(1)  稳定
  • 平均时间复杂度:O(N^2)   两个for循环嵌套
  • 最好时间复杂度:O(N)   有序时,j不需要回退,只剩下一个for循环

 2、希尔排序

(1)排序原理及方法:

  1. 第一趟增量序列为5,把待排序列分割为5个的子序列(第一个子序列从第一个元素开始,相隔5个元素,取下一个元素,直到取不够5个间隔的元素为止),其中每个子序列包含2个元素,分别对这5个子序列进行直接插入排序。
  2. 第二趟增量序列为2,把待排序列分割为2个的子序列(第一个子序列从第一个元素开始,相隔2个元素,取下一个元素,直到取不够2个间隔的元素为止),其中每个子序列包含5个元素,分别对这2个子序列进行直接插入排序。
  3. 最后一趟增量序列为1,待排序列整体进行直接插入排序,最后一趟数据已经基本有序,效率很高。

(2)排序方法图解:

(3)算法效率:

平均时间复杂度 最好时间复杂度 最坏时间复杂度 空间复杂度 稳定性
O(nlogn) O(n^1.3) O(n^2)  O(1)  不稳定

3、简单选择排序

(1)排序原理及方法:

从待排序列中第一个元素(i=0)开始,与下一个元素(j=i+1)进行比较,如果比第二个元素小,则交换位置,直到 j 向后走到数组最后一个元素,开始第二趟排序,这样就确定了最小的元素
第二趟排序从第二个元素(i=1)开始,与下一个元素(j=i+1)进行比较,如果比第二个元素小,则交换位置,这样就确定了数组中第二小的元素
以此类推,每一趟排序可以确定一个元素的位置,即最小的元素,第二小元素,第三小元素.....

(2)排序方法图解:

(3)算法效率:

平均时间复杂度 最好时间复杂度 最坏时间复杂度 空间复杂度 稳定性
O(N^2) O(N^2) O(N^2)  O(1)  不稳定
  • 最坏时间复杂度:O(N^2)  无论是否有序,都必须进行两层for循环进行比较

4、冒泡排序

(1)排序原理及方法:

第一趟从第一个元素array[0]开始,与下一个元素array[1]进行比较,如果array[1]小于array[ 0],则交换位置,然后比较array[1]和array[ 2],如果array[1]小于array[ 2],则交换位置,以此类推,直到比较完全部元素,就确定了最大元素
第二趟从第一个元素array[0]开始,与下一个元素array[1]进行比较,依次两组元素进行比较,直到比较完除了最后一个元素的全部元素,这样就确定了第二大元素
每一趟比较结束,就依次确定了最大元素,第二大元素,第三大元素...

(2)排序方法图解:

(3)算法效率:

平均时间复杂度 最好时间复杂度 最坏时间复杂度 空间复杂度 稳定性
O(N^2) O(N)  O(N^2)  O(1)  稳定
  • ​​​最好时间复杂度:O(N)   数据有序的情况下,不需要交换数据,即内部for循环复杂度为O(1)

5、快速排序

(1)排序原理及方法:

从数列中挑出一个元素,称为"基准"(pivot)。
重新排序数列,所有比基准值小的元素摆放在基准前面,所有比基准值大的元素摆在基准后面(相同的数可以到任一边)。在这个分区结束之后,该基准就处于数列的中间位置。这个称为分区(partition)操作。
递归地(recursively)把小于基准值元素的子数列和大于基准值元素的子数列排序。

(2)排序方法图解:

(3)算法效率:

平均时间复杂度 最好时间复杂度 最坏时间复杂度 空间复杂度 稳定性
O(nlogn) O(nlogn)  O(N^2) O(logn)~ O(n)  不稳定

最好时间复杂度:当每次划分时,算法若都能分成两个等长的子序列时,分治算法效率达到最大

最坏时间复杂度:待排序列有序时,相当于冒泡排序,递归实现会出现栈溢出的现象,时间复杂度为O(N^2)

最好空间复杂度:每次都把待排序列分为相等的两部分,2^x=n (分割x次,保存x个par) ,x = logn

最坏空间复杂度:1 2 3 4 5 6 7   N个数据就保存N个par

6、归并排序

(1)排序原理及方法:

  • 把待排序列递归的分为长度相等的两个子序列,直到分解为1个子序列中包含1个元素为止
  • 递归的将每两个子序列合并为一个有序子序列
  • 最终合并的序列即为有序序列

(2)排序方法图解:

(3)算法效率:

平均时间复杂度 最好时间复杂度 最坏时间复杂度 空间复杂度         稳定性
O(nlogn) O(nlogn)  O(nlogn)  O(n) 稳定

7、堆排序

(1)排序原理及方法:

  • 将待排序序列构造成一个大顶堆
  • 此时,整个序列的最大值就是堆顶的根节点。
  • 将其与末尾元素进行交换,此时末尾就为最大值。
  • 然后将剩余n-1个元素重新构造成一个堆,这样会得到n个元素的次小值。如此反复执行,便能得到一个有序序列了。
  • 可以看到在构建大顶堆的过程中,元素的个数逐渐减少,最后就得到一个有序序列了.

(2)排序方法图解:

(3)算法效率:

堆排序

堆排序

O(n*logn)

不稳定

8、基数排序

(1)排序原理及方法:

将所有待比较数值统一为同样的数位长度,数位较短的数前面补零。然后,从最低位开始,依次进行一次排序。这样从最低位排序一直到最高位排序完成以后,
数列就变成一个有序序列。

(2)排序方法图解:

(3)算法效率:

平均时间复杂度 最好时间复杂度 最坏时间复杂度 空间复杂度         稳定性

基数排序是经典的空间换时间的排序方法,当数据量过大时,容易造成内存溢出

各个排序算法的时间复杂度、稳定性、快排的原理以及图解相关推荐

  1. 八大排序算法之快速排序(下篇)(快排的优化+非递归快排的实现)

    目录 一.前言 1.快速排序的实现: 快速排序的单趟排序(排升序)(快慢指针法实现):​ 2.未经优化的快排的缺陷 二.快速排序的优化 1.三数取中优化 优化思路: 2. 小区间插入排序优化 小区间插 ...

  2. (十)更快的排序算法(归并、快排、基数)

    目标 1) 使用下列方法将一个数组按升序排序:归并排序.快速排序和基数排序 2) 评估排序的效率,讨论不同的方法的相对效率 目录 9.1 归并排序 9.1.1 归并数组 9.1.2 递归归并排序 9. ...

  3. 排序算法:冒泡和快排 摘自网络

    冒泡排序: 首先我们自己来设计一下"冒泡排序",这种排序很现实的例子就是: 我抓一把沙仍进水里,那么沙子会立马沉入水底, 沙子上的灰尘会因为惯性暂时沉入水底,但是又会立马像气泡一样 ...

  4. 常见排序算法的时间复杂度、空间复杂度、稳定性比较

    常见排序算法的时间空间复杂度.稳定性比较 一.排序算法比较 注: 1.归并排序可以通过手摇算法将空间复杂度降到O(1),但是时间复杂度会提高. 2. 基数排序时间复杂度为O(N*M),其中N为数据个数 ...

  5. C语言排序算法 选择排序 插入排序 快速排序 qsort实现快排 堆排序

    常见排序算法 选择排序 选择排序(Selection sort)是一种简单直观的排序算法. 它的工作原理如下. 首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素 ...

  6. 如果我问你:排序算法的「稳定性」有何意义?你怎么回答?

    点击上方"朱小厮的博客",选择"设为星标" 后台回复"加群"加入公众号专属技术群 欢迎跳转到本文的原文链接:https://honeypps ...

  7. 各个排序算法及其时间复杂度

    各个排序算法及其时间复杂度 一.内部排序: 1.稳定的排序算法 1.1 冒泡排序 1.1.1 冒泡排序流程 1.1.2 冒泡排序的实现 1.2 插入排序 1.2.1 插入排序流程 1.2.2 插入排序 ...

  8. 算法介绍--- 二分法,冒泡排序,快排

    目录 二分法 冒泡排序 快速排序 二分法 二分法是一种在有序数组中查找某一特定元素的搜索算法. 搜索过程从数组的中间元素开始: 如果中间元素正好是要查找的元素,则搜索过程结束; 如果某一特定元素大于或 ...

  9. c语言验证完成排序算法的时间,排序算法的时间复杂度和空间复杂度

    常用的内部排序方法有:交换排序(冒泡排序.快速排序).选择排序(简单选择排序.堆排序).插入排序(直接插入排序.希尔排序).归并排序.基数排序(一关键字.多关键字). 一.冒泡排序: 1.基本思想: ...

最新文章

  1. https ssl 总结
  2. 如何将表中的数据导出到电子表格中
  3. 函数公开问题、简短模式、多一个返回值
  4. 开发者应如何看待iOS平台和Android平台
  5. linux 批量替换文件内容及查找某目录下所有包含某字符串的文件(批量修改文件内容)...
  6. linux删除csv换行符,从CSV保存行删除换行符(Remove linefeed from csv preserving r
  7. python 进程通信 延时_Python-----进程通信队列
  8. 关于USB-Audio(USB麦克风)设备的录音验证
  9. c# 数组不能直接=,需要clone
  10. java图片上写字不见了_用java在图片上写字
  11. 地图定位--制作公司地图位置
  12. 静态条件下三轴加速度求角度的算法
  13. 1024 程序员节狂欢盛会,等了一年终于来了!
  14. mind思维导图软件
  15. 回收站清空数据恢复步骤如何
  16. 带你玩转kubernetes-k8s(第61篇-Kubernetes之资源紧缺时的Pod驱逐机制)
  17. JAVA出现警告无法读取 AppletViewer 属性文件的解决方法
  18. 信息学奥赛一本通 1375:骑马修栅栏(fence) | 洛谷 P2731 [USACO3.3]骑马修栅栏 Riding the Fences
  19. Ubuntu Linux 系统安装、分区规划
  20. 有用的win11小技巧

热门文章

  1. 3900x做服务器性能怎么样,【茶茶】AMD YES?AMD R9 3900X测试报告
  2. 用HTML实现计数器功能
  3. 三、全国计算机三级数据库考试——操作题(1—5套)
  4. HTML利用posotion属性定位 小技巧
  5. 史上最全Python快速入门教程,让你快速入门python学好python
  6. proxy代理的配置
  7. 连线杂志:盖茨53年人生大事记
  8. 关于从3维空间进入4维空间的想法
  9. “我知道”和“我做到了”的差距
  10. WEB客户端编程与服务器端编程