考研 408 数据结构排序学习+代码

一、交换排序

1.冒泡排序

对于冒泡排序的理解有问题,它不是只针对最后一个元素进行依次交换,而是针对所有元素,相当于第一遍从最后一个元素遍历到第一个元素,第二遍从倒数第二个元素遍历到第一个元素,依次如此

上机测试

一遍过,没有问题

image-20220323171554504

2.快速排序

(挖坑法与交换法对比)

下面两个代码分别是挖坑法和交换法:

0

image-20220321143713923

以最左边作为分隔值,而交换法则是以最右边作为分隔值

发现一个问题,这个的前题条件是low和hight,它是代表着数组的空间位置,并不是数组中的数据

所以low刚开始一定是小于hight的

两者最本质的区别就是,挖坑法需要设置一个单独的坑,也就是一个整形,来存放我们用来标定的值(如最左边的值),而交换法,无需这一步,只需要右边不动,左边不断进行交换(方法是设置一个k和一个i,不断加1,与右边的值比较)。当然也可以反过来。

(1).交换法

两个单词的学习 partition (分隔) pivot point(枢纽点)

首先,这个代码的关键在于partition 也就是分隔,必须要找到分隔的这个位置,我们设为k

首先我们先确定他的low和high 也就是数组的最小下标和最大下标,low<high 时开始循环

然后我们就要找枢纽点,就是中间的那个位置,此时就是交换法与挖坑法的根本区别,交换法是直接确定数组最后一个位置为枢纽点的值,然后利用i(从数组第一位到最后一位遍历)利用循环让i与枢纽点不断比较,若是i小,那么就让i与k进行交换,因为我们最后要从小到大排序,(k一开始与i相同,只有当交换后才进行+1),

当i等于最右边的位置时(i = right),这时则不再循环,返回到qsort函数中,继续再一次调用**qsort*(因为我们不止排一次,我们要排好几次,直到数据从小到大有序);(递归)

上机测试

这个代码问题大了

首先这个代码要有三个函数值,我一开始感觉不需要第二个也可以,这儿的问题是没有理解递归,这儿递归调用自己本身,一开始认为调用的是partition,脑子有点不在线,注意递归一定是用if绝对不可以用while

然后partition函数只有小于最右边的值,这时我们才交换,也就是做到从小到大的顺序。

最后,其实我感觉很简单

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值