#Java 7, 149 bytes
Java 7, 149 bytes
float[]c(int[]x){int b=1<<31,a=b-1,j=0,l=x.length;for(int i:x){a=i<a?i:a;b=i>b?i:b;}float[]r=new float[l];for(;j<l;r[j]=x[j++]-a)*1f/(b-a);return r;}
Ungolfed & test code:
import java.util.Arrays;
class M{
static float[] c(int[] x){
int b = Integer.MIN_VALUE,
a = b-1, // In Java, Integer.MIN_VALUE - 1 = Integer.MAX_VALUE (and vice-versa)
j = 0,
l = x.length;
for(int i : x){
a = i < a ? i : a; // Determine min value of array
b = i > b ? i : b; // Determine max value of array
}
float[] r = new float[l];
for(; j < l; r[j] = (x[j++] - a) * 1f / (b-a));
return r;
}
public static void main(String[] a){
System.out.println(Arrays.toString(c(new int[]{ 5, -20, 30 })));
System.out.println(Arrays.toString(c(new int[]{ 1, 2, 3, 4, 5 })));
System.out.println(Arrays.toString(c(new int[]{ 0, 5, 100, 400 })));
}
}
Output:
[0.5, 0.0, 1.0]
[0.0, 0.25, 0.5, 0.75, 1.0]
[0.0, 0.0125, 0.25, 1.0]