问题描述
- 两个java数组比大小排序
-
举个例子,我现在有两个集合数组 A ={32,43,28,3,67,20, 40,0, 59 } B = {3 ,45, 18 ,83 ,30 ,28 ,40,56 ,25} 我要对两个集合数组的大小进行一 一的比较,最后整合到一个大集合数组C中,数字大的排的前面,数字小的在后面,如果AB有数字相同的,那将A组里面的数字排到B前面。求大神帮忙怎么用循环遍历来写这一段代码。
解决方案
上面写成了从小到大排序了,不好意思
public static int[] mergeSort(int[] A,int[] B){
int[] tmp = new int[A.length + B.length];
//将A,B分别排序
Arrays.sort(A);
Arrays.sort(B);
//合并到一个数组里面
int index = 0;//tmp的游标
int i = A.length - 1;//A的游标
int j = B.length - 1;//B的游标
while(i >= 0 && j >= 0){
if(A[i] >= B[j]){
tmp[index++] = A[i--];
}else{
tmp[index++] = B[j--];
}
}
while(i >= 0){
tmp[index++] = A[i--];
}
while(j >= 0){
tmp[index++] = B[j--];
}
return tmp;
}
解决方案二:
你的数组等长,那么遍历取同样位置的数据比较大小,放入合并后的数组,该数组长度是两个数组长度之和
解决方案三:
直接把两个数组连接起来用任何一种稳定的排序算法排序。(假定在待排序的记录序列中,存在多个具有相同的关键字的记录,若经过排序,这些记录的相对次序保持不变,即在原序列中,ri=rj,且ri在rj之前,而在排序后的序列中,ri仍在rj之前,则称这种排序算法是稳定的;否则称为不稳定的。基数排序、冒泡排序、直接插入排序、折半插入排序、归并排序是稳定的排序算法)
解决方案四:
在所有稳定的排序算法中,最简单的是冒泡排序。
http://blog.csdn.net/yyywyr/article/details/8075433
http://blog.163.com/yurong_1987@126/blog/static/475178632008615054342/
解决方案五:
合并两个数组,然后用冒泡排序就可以了
解决方案六:
使用归并的思想。将两个数组排序,然后再 合并到一起。
public static int[] mergeSort(int[] A,int[] B){
int[] tmp = new int[A.length + B.length];
//将A,B分别排序
Arrays.sort(A);
Arrays.sort(B);
//合并到一个数组里面
int index = 0;//tmp的游标
int i = 0;//A的游标
int j = 0;//B的游标
while(i < A.length && j < B.length){
if(A[i] <= B[j]){
tmp[index++] = A[i++];
}else{
tmp[index++] = B[j++];
}
}
//如果A中还有剩余元素,直接复制到tmp中
while(i < A.length){
tmp[index++] = A[i++];
}
//如果B中还有剩余元素,直接复制到tmp中
while(j < B.length){
tmp[index++] = B[j++];
}
return tmp;
}
解决方案七:
如果AB有数字相同的,那将A组里面的数字排到B前面
这个要求真是奇葩,数字都相同的,你怎么区分他是哪个数组的?整合到一个数组中,又不存在其他能够区分的标志位
解决方案八:
话说我也挺感兴趣这个相同数字的处理的,如何区分嗯。
解决方案九:
一定要先比大小再整合到一起吗?能不能先整合到一个数组里,然后再用Array.sort()。整合到一起:创建一个新数组,前x个等于A组,后x个等于B组。
解决方案十:
JAVA数组排序
Java数组排序sort()
时间: 2024-08-03 01:26:23