题目1
已知list_of_int为存放一个整数数列的型别。此型别经宣告后并没有实际的内存空间。此型别宣告后的变量可呼叫下列的create_list函数来做内存初使化的动作,或是透过assignment直接取得其它同型别变量内存空间的reference;
以c/c++, java为例
list_of_int a = create_list();
list_of_int b = a;已知下列四个函数 (不必实作):
list_of_int create_list()
没有输入参数,并且回传内存初使化后无任何整数在此数列的list_of_int。add_to_list(list_of_int input, int value)
将整数值value加在输入的整数数列list最后,此函数没有任何回传值。
以c/c++, java为例
list_of_int a = create_list();
add_to_list(a, 6);
add_to_list(a, 9);
此时的a所内含的整数数列为6, 9int get_list_size(list_of_int input_list)
能回传所输入的input_list整数数列中所包含的成员个数。
以c/c++, java为例
list_of_int a = create_list();
add_to_list(a, 6);
add_to_list(a, 9);
此时的get_list_size(a)的回传值为2int get_from_list(list_of_int list, int index)
能回传所输入的input_list整数数列中第index个成员的整数值。
以c/c++, java为例
list_of_int a = create_list();
add_to_list(a, 6);
add_to_list(a, 9);
此时的get_from_list(a, 1)的回传值为6, get_from_list(a, 2)的回传值为9请实作函数list_of_int merge(list_of_int a, list_of_int b)
能将两个经过由小到大排序的整数数列合并为一个由小到大排序的整数数列。假设所输入的数列a, b一定符合由小到大排序的原则。
以c/c++, java为例:
list_of_int merge(list_of_int a, list_of_int b)
以PL/SQL为例:
FUNCTION merge (a list_of_int, b list_of_int) RETURN list_of_int, 其中type list_of_int is table of number。下列为此函数输出的例子:
a为1, 2, 4且b为2, 3, 5
merge(a, b)执行的结果为1, 2, 2, 3, 4, 5
merge(null, b) 执行的结果为2, 3, 5
merge(a, null) 执行的结果为1, 2, 4原题就是这样,有些东西我看不明白,请帮忙
已知list_of_int为存放一个整数数列的型别。此型别经宣告后并没有实际的内存空间。此型别宣告后的变量可呼叫下列的create_list函数来做内存初使化的动作,或是透过assignment直接取得其它同型别变量内存空间的reference;
以c/c++, java为例
list_of_int a = create_list();
list_of_int b = a;已知下列四个函数 (不必实作):
list_of_int create_list()
没有输入参数,并且回传内存初使化后无任何整数在此数列的list_of_int。add_to_list(list_of_int input, int value)
将整数值value加在输入的整数数列list最后,此函数没有任何回传值。
以c/c++, java为例
list_of_int a = create_list();
add_to_list(a, 6);
add_to_list(a, 9);
此时的a所内含的整数数列为6, 9int get_list_size(list_of_int input_list)
能回传所输入的input_list整数数列中所包含的成员个数。
以c/c++, java为例
list_of_int a = create_list();
add_to_list(a, 6);
add_to_list(a, 9);
此时的get_list_size(a)的回传值为2int get_from_list(list_of_int list, int index)
能回传所输入的input_list整数数列中第index个成员的整数值。
以c/c++, java为例
list_of_int a = create_list();
add_to_list(a, 6);
add_to_list(a, 9);
此时的get_from_list(a, 1)的回传值为6, get_from_list(a, 2)的回传值为9请实作函数list_of_int merge(list_of_int a, list_of_int b)
能将两个经过由小到大排序的整数数列合并为一个由小到大排序的整数数列。假设所输入的数列a, b一定符合由小到大排序的原则。
以c/c++, java为例:
list_of_int merge(list_of_int a, list_of_int b)
以PL/SQL为例:
FUNCTION merge (a list_of_int, b list_of_int) RETURN list_of_int, 其中type list_of_int is table of number。下列为此函数输出的例子:
a为1, 2, 4且b为2, 3, 5
merge(a, b)执行的结果为1, 2, 2, 3, 4, 5
merge(null, b) 执行的结果为2, 3, 5
merge(a, null) 执行的结果为1, 2, 4原题就是这样,有些东西我看不明白,请帮忙
final static int MAXVALUE = 10000; static int[] L; static int[] R; public static void Merge(int[] A, int p, int q, int r) {
int n1 = q - p;// correct
int n2 = r - q + 1;// correct //int n1 = q-p; //int n2 = r-q;
L = new int[n1 + 1];
R = new int[n2 + 1];
for (int i = 0; i < n1; i++) {
L[i] = A[p + i];
}
for (int j = 0; j < n2; j++) {
R[j] = A[q + j];
}
L[n1] = MAXVALUE;
R[n2] = MAXVALUE;
int i = 0, j = 0;
for (int k = p; k <= r; k++) { // for(int k = p; k < r ;k++){
if (L[i] <= R[j]) {
A[k] = L[i];
i++;
} else {
A[k] = R[j];
j++;
}
}
} public static void MergeSort(int[] A, int p, int r) {
int q;
if (p < r) {
q = (p + r) / 2; /* correctness */
MergeSort(A, p, q);
MergeSort(A, q + 1, r);
Merge(A, p, q + 1, r); /* test *//*
* MergeSort(A,p,q);
* MergeSort(A,q,r); Merge(A,p,q,r);
*/
}
}
public static int[] merge(int[] a, int[] b){
int[] c = new int[a.length +b.length];
int n = 0;
for(int i=0; i<a.length; i++){
c[n] = a[i];
n++;
}
for(int i=0; i<b.length; i++){
c[n] = b[i];
n++;
}
return c;
} public static void main(String[] args) {
int[] a = {1,2,3}; //输入数组1
int[] b = {2,3,4}; // //输入数组2
int[] inputArray = merge(a,b);
MergeSort(inputArray, 0, inputArray.length - 1);
//输出合并及排序的结果。
for (int i = 0; i < inputArray.length; i++) {
System.out.println("intArray[" + i + "]=" + inputArray[i]);
}
}}
public class MergeSortAlgorithm {
final static int MAXVALUE = 10000; static int[] L; static int[] R; public static void Merge(int[] A, int p, int q, int r) {
int n1 = q - p;// correct
int n2 = r - q + 1;// correct //int n1 = q-p; //int n2 = r-q;
L = new int[n1 + 1];
R = new int[n2 + 1];
for (int i = 0; i < n1; i++) {
L[i] = A[p + i];
}
for (int j = 0; j < n2; j++) {
R[j] = A[q + j];
}
L[n1] = MAXVALUE;
R[n2] = MAXVALUE;
int i = 0, j = 0;
for (int k = p; k <= r; k++) { // for(int k = p; k < r ;k++){
if (L[i] <= R[j]) {
A[k] = L[i];
i++;
} else {
A[k] = R[j];
j++;
}
}
} public static void MergeSort(int[] A, int p, int r) {
int q;
if (p < r) {
q = (p + r) / 2; /* correctness */
MergeSort(A, p, q);
MergeSort(A, q + 1, r);
Merge(A, p, q + 1, r); /* test *//*
* MergeSort(A,p,q);
* MergeSort(A,q,r); Merge(A,p,q,r);
*/
}
}
public static int[] merge(int[] a, int[] b){
if(a==null)
return b;
if(b==null)
return a;
int[] c = new int[a.length +b.length];
int n = 0;
for(int i=0; i<a.length; i++){
c[n] = a[i];
n++;
}
for(int i=0; i<b.length; i++){
c[n] = b[i];
n++;
}
return c;
} public static void main(String[] args) {
int[] a = {1,2,3}; //输入数组1
int[] b = {2,3,4}; // //输入数组2
int[] inputArray = merge(a,b);
MergeSort(inputArray, 0, inputArray.length - 1);
//输出合并及排序的结果。
for (int i = 0; i < inputArray.length; i++) {
System.out.println("intArray[" + i + "]=" + inputArray[i]);
}
}
}
a为1, 2, 4且b为2, 3, 5
merge(a, b)执行的结果为1, 2, 2, 3, 4, 5
merge(null, b) 执行的结果为2, 3, 5
merge(a, null) 执行的结果为1, 2, 4你的这些测试用例都可以通过。
学习,佩服ing
~~~~~~~