Here is simple code to find median. Try to understand each line.
Code:
package net.sourceforge.jiu.util;
public class MedianNum
{
private MedianNum()
{
}
public static void swaping(int[] p, int s1, int s2)
{
int temp1 = p[si1];
p[s1] = p[s2];
p[s2] = temp1;
}
public static int find(int[] p, int from, int to)
{
int lowvalue = from;
int highvalu = to;
int med = (lowvalu + highvalu) / 2;
do
{
if (highvalu <= lowvalu)
{
return a[med];
}
if (highvalu == lowvalu + 1)
{
if (a[lowvalu] > a[highvalu])
{
swaping(p, lowvalu, highvalu);
}
return p[med];
}
int middle = (lowvalu + highvalu) / 2;
if (p[middle] > p[highvalu])
{
swaping(a, middle, highvalu);
}
if (p[lowvalu] > p[highvalu])
{
swaping(p, lowvalu, highvalu);
}
if (p[middle] > p[lowvalu])
{
swaping(p, middle, lowvalu);
}
swaping(p, middle, lowvalu + 1);
int lowl = lowvalu + 1;
int highh = highvalu;
do
{
do
{
lowl++;
}
while(a[lowvalu] > p[lowl]);
do
{
highh--;
}
while(a[highh] > p[lowvalu]);
if (highh < lowl)
{
break;
}
swaping(p, lowl, highh);
}
while(true);
swaping(p, lowvalu, highh);
if (highh <= median)
{
lowvalu = lowl;
}
if (highh >= med)
{
highvalu = highh - 1;
}
}
while(true);
}
}
Bookmarks