Java數組合並,完成排序,從時間複雜度,和空間複雜度考慮

提供方法,直接調用,支持任意個數組的合併成一個數組,而且完成排序,每一個數組元素個數不定。須要提供兩個方法,分別作到時間複雜度最低、空間複雜度最低。並說明兩個方法的時間複雜度和空間複雜度java

面試題: 題目就這樣,只能理解到這,望你們給出正確的答案。面試

一、時間複雜度最低 (暫時還沒研究明白....)數組

二、空間複雜度最低 (湊合看吧)在資料書中看到的 指針

package lcr;

public class ArrayMerge {

	public static void main(String[] args) {
		int[] a = new int[10];
		a[0] = 100;
		a[1] = 111;
		a[2] = 112;
		int[] b = { 10, 11, 12 };
		merge(a, 3, b, 3);
		for (int i = 0; i < a.length; i++) {
			System.out.println(a[i] + " ");
		}

	}
	/**
	 * 空間複雜度最低
	 * 1.假定一個新的數組,長度爲合併以後的長度 m + n 
	 * 2.比較大小,較大的日後移動,指針前移
	 * 3.合併以後的數組不新分配內存空間,而是利用已有的數組存放
	 * 4.參數在末端插入,若是數組空間沒有填滿,複雜度爲O(1)
	 * @param a
	 * @param m
	 * @param b
	 * @param n
	 */
	public static void merge(int a[], int m, int b[], int n) {
		int i = m - 1;
		int j = n - 1;
		int index = m + n - 1; //假定一個新的數組,長度爲合併以後的長度 m + n 
		while (i >= 0 && j >= 0) {
			if (a[i] > b[j]) { //比較大小,較大的日後移動,指針前移
				a[index] = a[i];
				index = index - 1;
				i = i - 1;
			} else {
				a[index] = b[j];
				index = index - 1;
				j = j - 1;
			}
		}

		while (i >= 0) {
			a[index] = a[i];
			index = index - 1;
			i = i - 1;
		}

		while (j >= 0) {
			a[index] = b[j];
			index = index - 1;
			j = j - 1;
		}
	}

}
相關文章
相關標籤/搜索