面试需要的基础知识-合并排序数组

题目

有两个排序的数组A1和A2,内存在A1的末尾有足够多的空余空间容纳A2。请实现一个函数,把A2中的所有数字插入到A1中并且所有的数字是排序的。

解题思路

从尾到头比较A1和A2中的数字,比较大的数字复制到A1数组的最后一个未替换的位置

实现代码

/**
 * 
 */
package com.jason.interviewQuestions.basicKnowledge;

/**
 * 有两个排序的数组A1和A2,内存在A1的末尾有足够多的空余空间容纳A2。请实现一个函数,把A2中的所有数字插入到A1中并且所有的数字是排序的。
 * @author jason zhang
 *
 */
public class InsertSortedArray {

	public void insertSortedArray(int[] a1, int[] a2, int a1OriginalLength) {
		if (a1 == null || a2 == null || a1OriginalLength <= 0) {
			return;
		}
		int indexOfOriginalA1 = a1OriginalLength - 1;
		int indexOfA2 = a2.length - 1;
		int indexOfA1 = a1.length - 1;
		while (indexOfA2 >= 0) {
			if (a2[indexOfA2] >= a1[indexOfOriginalA1]) {
				a1[indexOfA1--] = a2[indexOfA2--];
			} else {
				a1[indexOfA1--] = a1[indexOfOriginalA1--];
			}
		}
	}
}

测试代码

package com.jason.interviewQuestions.basicKnowledge;

import junit.framework.TestCase;

public class InsertSortedArrayTest extends TestCase {

	private InsertSortedArray isa;
	protected void setUp() throws Exception {
		super.setUp();
		this.isa = new InsertSortedArray();
	}

	public void testInsertSortedArray() {
		int[] a1 = {1,3,8,9,11};
		int[] a2 = {2,5,10,12};
		int[] newA1 = new int[(a1.length + a2.length)];
		System.arraycopy(a1, 0, newA1, 0, a1.length);
		this.isa.insertSortedArray(newA1, a2, a1.length);
		for (int i=0; i<newA1.length; i++) {
			System.out.print(newA1[i] + ",");
		}
	}

}


你可能感兴趣的:(面试,基础知识,合并排序数组)