题目:
有两个排序的数组A1和A2, 内存在A1的末尾有足够多的空余空间容纳A2,请实现一个函数,把A2中的所有数组 插入到A1中并且所有的数字都是排序的。
分析:
1.在内存中数组是线性表数据结构,数据都是按顺序储存的,如果从数组头部进行归并排序, 会出现一个数字多次复制的现象,内存开销比较大,从后往前复制会减少数字移动次数,减小开支。
2.数组长度固定,先用指针指向A1和A2以及归并后A1的尾部下坐标。
3.比较A1和A2指针处数字大小,把较大的数字放到归并后A1指针的位置,同时,较大数字所在数组和归并后A1指针向前移一个位置。
4.如果A2中还有元素没有插入到A1中,则全部插入到A1的前面。
案列:
以数组A1[7,8,9,11]和A2[4,5,8,10]为例,初始时指针指向A1中的11,A2中的10,归并后A1的尾部下坐标
比较11和10,11大于10,把11复制到归并后A1尾部,A1和归并后A1指针向前移一个单位,A1指针指向9。
同理,比较10大于9,把10复制到归并后A1尾部,A2和归并后A1指针向前移一个单位,A2指针指向8
依次排序,直到归并成一个递增数组。
参考代码: