import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
public class Section1_5 {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
System.out.println("请输入值的个数:");
int num;
num = scan.nextInt();
System.out.println("请输入要比较的数:");
double arr[] = new double[num];
for (int i = 0; i < num; i++) {
arr[i] = scan.nextDouble();
}
DealNum d = new DealNum();
double[] array = d.order(arr);// 存放最大最小两个端点的数组
Region r = new Region();
float result = (float)r.compare(r.distribute(arr, r.divide(array, num), array));
System.out.println(result);
}
}
class Region {
double left;// 下限
// int right;//上限
double low;// 区间最大值
double high;// 区间最小值
double length;// 区间长度
int count;// 区间内数字个数
List<Region> list;
// 无参构造函数
public Region() {
}
// 带参构造函数
public Region(double left, double low, double high, double length) {
this.left = left;
this.low = low;
this.high = high;
this.length = length;
}
/**
* 将区间划分出来
*
* @param arr
* []为求得的包含最大与最小值得数组,length为输入的数字个数
* @author LiuYong
* @version 2013-9-4 下午12:05:24
*/
public List<Region> divide(double[] arr, int length) {
double len = 0;// 间距大小
list = new ArrayList<Region>();
len = (arr[1] - arr[0]) / (length - 1);
for (int i = 0; i < length - 1; i++) {
Region r = new Region(arr[0] + len * i, 0, 0, len);
list.add(r);
}
return list;
}
/**
* 分配数组中的数
*
* @param arr
* []代表需要比较的数组 list代表区间对象链表, min代表最小值
* @author LiuYong
* @version 2013-9-4 下午2:04:57
*/
public List<Region> distribute(double[] arr, List<Region> list, double[] array) {
int j = 0;
int i = 0;
while (j <= list.size()) {
i = (int) ((arr[j] - array[0]) / list.get(0).length);
if (i == list.size()) {
i = i - 1;
}
if (list.get(i).count != 0) {
if (arr[j] > list.get(i).high) {
list.get(i).high = arr[j];
list.get(i).count++;
j++;
}
if (arr[j] < list.get(i).low) {
list.get(i).low = arr[j];
list.get(i).count++;
j++;
}
} else {
list.get(i).low = arr[j];
list.get(i).high = arr[j];
list.get(i).count++;
j++;
}
}
return list;
}
public double compare(List<Region> list) {
double gap = 0;
double tempgap = 0;
double low=0;
double high=list.get(0).high;
for (int i = 1; i < list.size() ; i++) {
if(list.get(i).count!=0){
low=list.get(i).low;
tempgap = low - high;// 用后一个区间的最小值减前一个区间的最大值,得出第一个间隙
gap = gap < tempgap ? tempgap : gap;
high=list.get(i).high;
}
}
return gap;
}
}
class DealNum {
/**
* 找到最大最小值
*
* @author LiuYong
* @version 2013-9-4 上午11:49:02
*/
public double[] order(double[] arr) {
double mintemp = arr[0];
double maxtemp = arr[0];
double[] array = new double[2];
for (int i = 0; i < arr.length; i++) {
if (mintemp > arr[i]) {
mintemp = arr[i];
}
if (maxtemp < arr[i]) {
maxtemp = arr[i];
}
array[0] = mintemp;
array[1] = maxtemp;
}
return array;
}
}