packagecom.liuzhen.chapter6;public classPresortElementUniqueness {//归并排序
public void mergeSort(int[] A){if(A.length > 1){int[] leftA = getHalfArray(A,0); //数组A的左半部分
int[] rightA = getHalfArray(A,1); //数组A的右半部分
mergeSort(leftA);
mergeSort(rightA);
getMerge(A,leftA,rightA);
}
}/** 参数A:要进行折半的数组
* 参数judge:judge == 0表示返回数组A左上半部分,judge != 0表示返回数组A的右半部分
* 函数功能:把数组按照长度均分为上半部分和下半部分*/
public int[] getHalfArray(int[] A,intjudge){int[] result;if(judge == 0){
result= new int[A.length/2];for(int i = 0;i < A.length/2;i++)
result[i]=A[i];
}else{
result= new int[A.length - A.length/2];for(int i = 0;i < A.length - A.length/2;i++)
result[i]= A[i+A.length/2];
}returnresult;
}/**参数A:给定待排序数组
*参数leftA:数组A的左半部分
*参数rightA:数组的右半部分
*函数功能:返回数组A的从小到大排序*/
public void getMerge(int[] A,int[] leftA,int[] rightA){int i = 0; //用于计算当前遍历leftA的元素个数
int j = 0; //用于计算当前遍历rightA的元素个数
int count = 0; //用于计算当前得到按从小到大排序的A的元素个数
while(i < leftA.length && j
A[count++] =leftA[i];
i++;
}else{
A[count++] =rightA[j];
j++;
}
}if(i
A[count++] = leftA[i++];
}if(j
A[count++] = rightA[j++];
}
}//返回数组A(PS:数组A是有序数组)中模式
public int presortMode(int[] A){int i = 0;int modeFrequency = 0;int modeValue = 0;while(i
count++;
temp++;
}if(count >modeFrequency){
modeFrequency=count;
modeValue=A[i];
}
i= i+count;
}returnmodeValue;
}public static voidmain(String[] args){
PresortElementUniqueness test= newPresortElementUniqueness();int[] A = {3,2,1,8,7,4,3,6,1,7,3,3,7,7,7,7};
test.mergeSort(A);
System.out.println("使用归并排序后数组A的结果:");for(int i = 0;i < A.length;i++)
System.out.print(A[i]+" ");
System.out.println("\n数组A中模式为:"+test.presortMode(A));int[] B = {9,8,7,6,5,4,3,2,1};
test.mergeSort(B);
System.out.println("使用归并排序后数组B的结果:");for(int i = 0;i < B.length;i++)
System.out.print(B[i]+" ");
System.out.println("\n数组B中模式为:"+test.presortMode(B));
}
}