有序序列合并之抽丝剥茧(新手初试茅庐)

文章目录

1.合并两个有序序列

2.让合并后的数组按从小到大的心顺序排列

整体架构流程

1.先创造两个数组

2.探究让数组里面元素排列的方法

技术细节

首先,我暂且想到有一种方法解决这个问题

a.我们可以创建两个数组,但是将这两个有序数组放入同一数组中,如下

 让两个数组下标连接起来,第二个数组,下标从n开始,接着上一个循环写。说白了就是将一个数组拆分为两个数组,接下来就是将里面元素排序,从小到大。

b.这种做法原理就是每次循环都找出一个最大值,上一个循环确定了的最大值就不用参与下一个循环了

 我们这里要用到两个循环,当i++就代表着每次都有个最大值不参与下一轮,假如i=0时,先是arr[0]与arr[1]比较,如果arr[0]>arr[1],则设法让他们两个值互换,这样arr[1]对应的值就更大一些了,接着arr[1]与arr[2]比较,如果arr[1]>arr[2],则让他们两个只互换,这样arr[2]对应的值就大于arr[1]了,接着,arr[2]arr[3]比较,这里如果arr[2]<arr[3],则他们两个值不用变,因为arr[3]对应的值原本就大于arr[2],以此类推,这样就可以选出这些数中最大的一个,但无法确定出剩下值的顺序,就比如arr[1]=15,arr[2]=13,arr[3]=12,arr[1]先于arr[2]比较,结果是13,15,12,再arr[2]和arr[3]比较,结果为13,12,15,这样可以确定最大值为15,而13>12,但13却在12之前,所以这种做法只能确定最大值,剩下的值大小无法确定。

     所以当我们确定了一个最大值后,就只用比较剩下的数字了,所以第二个循环的比较次数要减少一次,又j<m+n-i-1,i++,所以一次循环后j会减一,这样又会选出剩下的数字中最大的,但在所有元素中第二大的,以此类推,每轮在剩余元素中选出一个最大值,但下于上一轮的最大值,这样就可以让元素从小到大排列了。

    例如12,14,49,1,5,23,48

第一轮比较后:12,14,1,5,23,48,49

第二轮比较后:12,1,5,14,23,48,49

第三轮比较后:1,5,12,14,23,48,49

这样就可以让元素从小到大排列了。

 

 可能讲解的不太清楚,新手请多包涵!!!

评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值