文章目录
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
这样就可以让元素从小到大排列了。
可能讲解的不太清楚,新手请多包涵!!!