数据结构与算法——交换排序

作者:坚定的守猴

撰写时间:2020年5月16日

在处理数据的算法当中,有几种排序的方法:出入排序、交换排序和选择排序。这几种的排序方法中都各有特点。下面我们就来说一下当中的一种——交换排序。

了解一种算法,最基本的就是先从它的概念入手。它的基本思想是,在一个待排序的序列的记录中,任取一个值为基准记录,然后就以这个基准记录为这个序列的界限,将待排序的序列当中划分成两个子序列,里面的序列记录小于基准记录的就往左边排序,大于基准记录的就往右边排序。由于只是把开始的序列排好了,之后就开始把那划分之后的两个子排序进行以此类推的方法进行排序。直到每个子序列当中只有一个序列,看上去是有顺序进行展示的。

感知这个交换排序的基本思想之后,下面就通过代码进行介绍一下。

在这里插入图片描述

首先我们先定义一个序列,对于序列r从i到j的范围进行排序。按照上面介绍到的基本思想进行排序,选择第i个记录作为基准记录,然后就对这个基准记录进行一个备份。

备份之后,我们就来开始对序列里面的记录值进行与基准记录进行对比。因为在一个待排序的序列当中,每个值都是不分大小,散乱分布的,所以就分两种情况进行处理。

在这里插入图片描述

第一当i<j并且找到的第一个r[j].key值是大于r[0].key的基准记录值,把这个值就排序在基准值的右边;之后以j为起点,从右往左j–进行寻找小于r[0].key的基准记录值的值,当找到的r[j]的值与r[i]的基准记录相等。进行转换第二种方式查找。

在这里插入图片描述

第二种的方式就是当r[i].key的值小于r[0].key的基准值,就把这个值排在基准值的左边,然后以开头i值为起点,从左往右进行i++进行寻找,当找到的r[i]的值与r[j]的基准记录相等。进行转换第一种方式的查找。

最后按照基准记录的“左小右大”的顺序排好之后,就把基准记录的值返回到序列的原来位置。

在这里插入图片描述

上面的父序列已经排序好了,之后就开始排两个子序列了。对于子序列的排序,我们就采用排序当中的递归算法。

在这里插入图片描述

将父序列划分为左右区间的两个子序列,左区间是从r到l的范围,右区间则是从r到h的范围。K则为父序列的基准值,在上面排好序之后就返回的值。所以左区间的排序就是l到k-1之间进行排序;右区间是从k+1到h之间排序。

经过以上的排序处理,一个有序序列的排序操作就基本完成了。下面来看一下实际例子的效果图(待排序列为29、07、47、53、21、36、98、16)

在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值