数据结构之内部排序--排序的基本概念

本文介绍了排序的基本概念,包括内部排序与外部排序的区别、排序的稳定性、主关键字与次关键字的概念,并详细列举了各种常见的排序算法及其特性,如插入类排序、交换类排序、选择类排序、归并排序和分配类排序。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

                          数据结构之内部排序--排序的基本概念

排序

有n个记录的序列R1,R2,...,RnR1,R2,...,Rn,其相应的关键字的序列是K1,K2,...,KnK1,K2,...,Kn,相应的下标序列1,2,…,n。通过排序,找出当前的下标序列1,2,…,n的一种排列p1,p2,...pnp1,p2,...,pn,使得相应的关键字满足如下的非递减(或者非递增)关系:Kp1<=Kp2<=...<=KpnKp1<=Kp2<=...<=Kpn,这样就得到一个按关键字乐有序的记录序列。

内部排序与外部排序

根据排序时数据所占用的存储器的不同,可以将排序分为两大类。一类是整个排序过程完全在内存中进行,称为内部排序;另一类是由于待排序记录数据量太大,内存无法容纳全部数据,排序需要借助外部存储设备才能完成,称为外部排序

主关键字与次关键字

上面所说的关键字KiKi可以是记录RiRi的主关键字,也可以是此关键字,甚至可以时记录中若干数据項的组合。若KiKi是主关键字,则任何一个无序的序列经排序后得到的有序序列是唯一3的;若KiKi是次关键字或是记录中若干数据項的组合,得到的排序结果可能是不唯一的。

排序的稳定性

若在排序前的的队列中RiRi领先于RjRj其中i<ji<j,经过排序后得到的序列中RiRi仍然领先于RjRj,则称排序方法是稳定的。反之领先关系在排序时发生变化,则称排序方法是不稳定的。 
无论是稳定的还是不稳定的算法,都可以很好的排序,只不过在某些时候我们需要让他的顺序保持不变。

常用排序的基本类型

1.插入类排序

-直接插入排序
-折半插入排序
-希尔排序
  • 1
  • 2
  • 3
  • 4
排序算法 稳定性 时间复杂度 最好情况 最坏情况 空间复杂度
直接插入 稳定 O(n2)O(n2) O(n)O(n) O(n2)O(n2) O(1)O(1)
折半插入 稳定 O(n2)O(n2) O(nlogn)O(nlogn) O(n2)O(n2) O(1)O(1)
希尔排序 不稳定 O(n1.5)O(n1.5)     O(1)O(1)

2.交换类排序

-冒泡排序
-快速排序
  • 1
  • 2
  • 3
排序算法 稳定性 时间复杂度 最好情况 最坏情况 空间复杂度
冒泡排序 稳定 O(n2)O(n2) O(n)O(n) O(n2)O(n2) O(1)O(1)
快速排序 不稳定 O(nlog2n)O(nlog2n) O(nlog2n)O(nlog2n) O(n2)O(n2) O(log2n)O(log2n)

3.选择类排序

-简单选择排序
-树形选择排序
-堆排序
  • 1
  • 2
  • 3
  • 4
排序算法 稳定性 时间复杂度 最好情况 最坏情况 空间复杂度
简单选择排序 不稳定 O(n2)O(n2) O(n2)O(n2) O(n2)O(n2) O(1)O(1)
树形选择排序 稳定 O(nlog2n)O(nlog2n) O(nlog2n)O(nlog2n) O(nlog2n)O(nlog2n) O(n)O(n)
堆排序 不稳定 O(nlog2n)O(nlog2n) O(nlog2n)O(nlog2n) O(nlog2n)O(nlog2n) O(1)O(1)

4.归并排序

-归并排序
  • 1
  • 2
排序算法 稳定性 时间复杂度 最好情况 最坏情况 空间复杂度
归并排序 稳定 O(nlog2n)O(nlog2n)   O(nlog2n)O(nlog2n) O(n)O(n)

5.分配类排序

-多关键字排序
-链式基数排序
  • 1
  • 2
  • 3

总结

数据结构在计算机世界里承担很重要的角色。就例如十万个数排序快速排序的时间在0.5s左右(Python编写),而有的排序则需要十几分钟,可想而知,在现在大数据时代,没有一个好的数据结构,没有一个好的算法,对生产来说,十分不利。其次数据结构也大大的提升了自己的逻辑判断水平。对提升自己的编码水平,有很大的帮助,对自己以后研究算法,也会打下坚实的基础。或许这些算法以后用不到,但是我知道,其他复杂的算法都是在基础的算法之上建立的,也应当对这些基础算法进行了解。 
此篇文章参考 
【1】耿国华,张德同,周全名等.数据结构用c语言描述【M】.第二版.北京:高等教育出版社.2016.


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值