数据结构与算法:线性排序比较

开发 前端
计数排序只能用在数据范围不大的场景中,如果数据范围k比要排序的数据n大很多,就不适合用计数排序了。而且,计数排序只能给非负整数排序,如果要排序的数据是其他类型的,要将其在不改变相对大小的情况下,转化为非负整数。

一、概述

三种时间复杂度是O(n)的线性排序算法:桶排序、计数排序、基数排序。

二、相似点

这三种排序算法都利用了桶的概念,但对桶的使用方法上有明显差异:

  • 基数排序:根据键值的每位数字来分配桶;
  • 计数排序:每个桶只存储单一键值;
  • 桶排序:每个桶存储一定范围的数值;

三、适用场景

桶排序比较适合用在外部排序中。所谓的外部排序就是数据存储在外部磁盘中,数据量比较大,内存有限,无法将数据全部加载到内存中。

计数排序只能用在数据范围不大的场景中,如果数据范围k比要排序的数据n大很多,就不适合用计数排序了。而且,计数排序只能给非负整数排序,如果要排序的数据是其他类型的,要将其在不改变相对大小的情况下,转化为非负整数。

基数排序对要排序的数据是有要求的,需要可以分割出独立的“位”来比较,而且位之间有递进的关系,如果a数据的高位比b数据大,那剩下的低位就不用比较了。除此之外,每一位的数据范围不能太大,要可以用线性排序算法来排序,否则,基数排序的时间复杂度就无法做到O(n)了。

四、复杂度

排序算法

时间复杂度

空间复杂度

是否稳定

桶排序

O(n)

O(n)

稳定

计数排序

O(n)

O(n+k)

稳定

基数排序

O(k*n)

O(n)

稳定


责任编辑:武晓燕 来源: 今日头条
相关推荐

2023-03-10 08:07:39

数据结构算法计数排序

2023-03-02 08:15:13

2023-11-06 06:43:23

单链表查询数据结构

2023-03-07 08:02:07

数据结构算法数列

2023-04-27 09:13:20

排序算法数据结构

2019-03-29 09:40:38

数据结构算法前端

2021-07-16 04:57:45

Go算法结构

2021-03-23 08:33:22

Java数据结构算法

2023-03-06 08:10:52

数据结构算法数据

2021-04-15 09:36:44

Java数据结构算法

2009-08-11 14:14:42

C#数据结构与算法

2021-04-16 09:40:52

Java数据结构算法

2009-08-03 17:38:12

排序算法C#数据结构

2020-10-21 14:57:04

数据结构算法图形

2012-04-28 14:21:47

Java数据结构线性结构

2023-03-08 08:03:09

数据结构算法归并排序

2021-04-22 10:07:45

Java数据结构算法

2023-10-27 07:04:20

2021-05-12 14:09:35

链表数据结构线性结构

2021-12-23 14:09:43

数据结构算法字符串
点赞
收藏

51CTO技术栈公众号