数据结构——排序

数据结构——排序

作者:黑衣侠客


一、前言及相关概念

在我们上网查一些东西的时候,或是在网上买东西的时候,在搜索一件物品时,我们会发现每次搜索时会搜索到很多的物品,那么,我们该如何选择,根据不同的需求,营销商给了我们不同的排列顺序,例如:可以按销量、可以按价格从高到低或是价格从低到高排序,那么网站如何做到快速而又准确的将商品按照某种规则进行排序的呢?这就是我们今天要说的排序
1.1 排序的基本概念及分类:
定义:

假设含有n个记录的序列为{r1,r2,…,rn},其相应的关键字分别为{k1,k2,…,kn},需确定1,2…,n的一种排列p1,p2,…,pn,使其相应的关键字满足kp1<=kp2<=…<=kpn(非递减或非递增)关系,即使得序列成为一个按关键字有序的序列{rp1,rp2,…,rpn},这样的操作就称为排序。

注意:我们在排序问题中,通常将数据元素称为记录。显然,我们输入的是一个记录集合,输出的也是一个记录集合,所以说,可以将排序看成是线性表的一种操作。而排序的依据是关键字之间的大小关系,意思是,对同一个记录集合,针对不同的关键字进行排序,可以得到不同的序列。

多个关键字的排序最终都可以转化为单个关键字的排序,因此,我们在这里主要讨论的是单个关键字的排序。

1.2 排序的稳定性:

由于排序不仅是针对主关键字,那么对于次关键字,因为待排序的记录序列中可能存在两个或两个以上的关键字相等的记录,排序结果可能会存在不唯一的情况,我们给出了稳定与不稳定排序的定义。

假设ki=kj(1<=i<=n,1<=j<=n,i≠j),且在排序前的序列中ri领先于rj(即i<j)。如果排序后ri仍领先于rj,则称所用的排序方法是稳定的;反之,若可能使用排序后的序列中rj领先ri,则称所用的排序方法是不稳定的。
1.3 内排序与外排序
根据在排序过程中待排序的记录是否全部被放置在内存中,排序分为:内排序和外排序

内排序是在排序整个过程中,待排序的所有记录全部被放置在内存中。外排序是由于排序的记录个数太多,不能同时放置在内存中,整个排序过程需要在内外存之间多次交换数据才能进行。

对于内排序来说,排序算法的性能主要是受3个方面影响:
  • 时间性能:排序是数据处理中经常执行的一种操作,往往属于系统的核心部分,因此排序算法时间开销是衡量其好坏的最重要的标志。在内排序中,主要进行两种操作:比较和移动。比较指关键字之间的比较,这是要做排序最起码的操作。移动指记录从一个位置移动到另一个位置,事实上,移动可以通过改变记录的存储方式来予以避免(这个我们在讲解具体的算法时再谈)。总之,高效率的内排序算法应该是具有尽可能少的关键字比较次数和尽可能少的记录移动次数。
  • 辅助空间:评价排序算法的另一个主要标准是执行算法所需要的辅助存储空间。辅助存储空间是除了存放待排序所用的存储空间之外,执行算法所需要的其他存储空间。
  • 算法的复杂性:这里指的是算法本身的复杂度,而不是指算法的时间复杂度。(算法过于复杂也会影响排序的性能)
我们把内排序分为:插入排序、交换排序、选择排序和归并排序。可以说,这些都是比较成熟的排序技术,已经被广泛地应用于许多的程序语言或数据库中,甚至它们都已经封装了关于排序算法的实现代码。
其中,按照算法的复杂度分为两大类:
  • 简单算法:冒泡排序、简单选择排序和直接插入排序
  • 改进算法:希尔排序、堆排序、归并排序、快速排序

未完…正在更新

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值