您的位置:首页 > 其它

两个有序数组合并,并去重复

2011-10-20 20:48 295 查看
import java.util.Iterator;

import java.util.Set;

import java.util.TreeSet;

class ArraySort {

// 两个有序数组的合并函数

public static int[] MergeList(int a[], int b[]) {

int result[];

if (checkSort(a) && checkSort(b)) // 检查传入的数组是否是有序的

{

result = new int[a.length + b.length];

int i = 0, j = 0, k = 0; // i:用于标示a数组 j:用来标示b数组 k:用来标示传入的数组

while (i < a.length && j < b.length)

if (a[i] <= b[j]) {

if (k == 0 || result[k - 1] != a[i]) //去重复

result[k++] = a[i];

i++;

} else {

if (k == 0 || result[k - 1] != b[j]) //去重复

result[k++] = b[j];

j++;

}

/* 后面连个while循环是用来保证两个数组比较完之后剩下的一个数组里的元素能顺利传入 */

while (i < a.length) {

if (k == 0 || result[k - 1] != a[i]) //去重复

result[k++] = a[i];

i++;

}

while (j < b.length) {

if (k == 0 || result[k - 1] != b[j]) //去重复

result[k++] = b[j];

j++;

}

return result;

} else {

System.out.print("非有序数组,不可排序!");

return null;

}

}

// 检查数组是否是顺序存储的

public static boolean checkSort(int a[]) {

boolean change = true; // 这个标志位是一种优化程序的方法,可以看看我写的冒泡排序优化就会明白了

for (int i = 0; i < a.length - 1 && change; i++) {

for (int j = i + 1; j < a.length; j++)

if (a[j - 1] > a[j])

return false;

else

change = false;

}

return true;

}

// 打印函数

public static void print(int b[]) {

for (int i = 0; i < b.length; i++) {

System.out.print(b[i] + (i % 10 == 9 ? "\n" : "\t"));

System.out.println("\n");

}

}

public static void main(String args[]) {

int a[] = { 1, 2, 2, 3, 5, 6, 7, 7 };

int b[] = { 1, 2, 4, 5, 8, 8, 9, 10, 11, 12, 12, 13, 14 };

int c[] = MergeList(a, b);

if (c != null)

print(c);

else

System.out.println("");

/*

* int t[]={1,4,5,6,7,8}; System.out.println(checkSort(t));

*/

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: