在java中查找中间值而不进行排序
我需要用java编写一个程序,在不进行排序的情况下求三个或更多整数数组的中值。我需要一些想法。谢谢您可以使用。您还可以查找相关信息。您可以使用带有随机轴的快速排序分区步骤,而无需对其进行排序在java中查找中间值而不进行排序,java,median,Java,Median,我需要用java编写一个程序,在不进行排序的情况下求三个或更多整数数组的中值。我需要一些想法。谢谢您可以使用。您还可以查找相关信息。您可以使用带有随机轴的快速排序分区步骤,而无需对其进行排序 public class TestMedian { public static void main(String[] args){ int[] a = {1,9,-4,7,6,11,3,2,10}; int median; median =
public class TestMedian {
public static void main(String[] args){
int[] a = {1,9,-4,7,6,11,3,2,10};
int median;
median = new Median().findMedian(a,0,a.length-1);
if(a.length%2 != 0)
System.out.print("the median is : "+a[median]);
else
System.out.print("the median is : "+(a[median] + a[median + 1])/2 );
}
public int findMedian(int[] a,int left,int right){
int index = 0;
int mid = (left+right)/2;
index = partition(a,left,right);
while( index != mid){
if(index < mid)
index = partition(a,mid,right);
else index = partition(a,left,mid);
}
return index;
}
public int partition(int[] a,int i,int j ){
int pivot = (i+j)/2;
int temp;
while(i <= j){
while(a[i] < a[pivot])
i++;
while(a[j] > a[pivot])
j--;
if(i <= j){
temp = a[i];
a[i]=a[j];
a[j] = temp;
i++;j--;
}
}
return pivot;
}
}
公共类测试{
公共静态void main(字符串[]args){
int[]a={1,9,-4,7,6,11,3,2,10};
整数中值;
中位数=新的中位数().findMedian(a,0,a.length-1);
如果(a.长度%2!=0)
系统输出打印(“中位数为:”+a[中位数]);
其他的
系统输出打印(“中位数为:”+(a[中位数]+a[中位数+1])/2);
}
公共int findMedian(int[]a,int左,int右){
int指数=0;
int mid=(左+右)/2;
索引=分区(a、左、右);
while(index!=mid){
如果(指数 如果(我)不感兴趣,你为什么不把它分类呢?你想要一个类似的。@Jon Taylor,因为它很有趣homework@pianoman如果我不得不猜测,是的,我同意,但是,可能存在排序不可行的应用程序,例如时间关键型系统(特别是当阵列非常大时)@pianoman为什么会有这样刺耳的评论。即使是家庭作业,这又有什么关系呢?听起来用户只是想开始一些想法,而不是要求某人编程。它返回84(好像在左边搜索相等的数字和,在右边搜索一样),但应返回35:中位数为0.5个百分点-它应指向两个元素上的元素分割数组,其中1/2元素小于该数组,1/2元素大于该数组