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;

}

}