MATLAB: Attempt to reference field of non-structure array.

countererrorfind zeroinversions

So I'm trying to write a code to count the inversions in an array. So in the array [6,4,3,5,1,2] there are 12 inversions. 6 is greater than 5 of the numbers to the right of it, 4 is greater than three of the numbers to the right of it, and so on. However, I need it so that the function doesn't count zero. So if there was a zero in the place of the 3, 6 would only be greater than 4 of the numbers to the right of it. (zero counts as a space, not as a number. I got some help, and this is the code I have to far
while (a <= array.length)
while (b <= array.length)
if array(a)>array(b);
count = count + 1;
else
count = count + 0;
end
b = b + 1;
end
a = a + 1;
end
When I try to run an example array through it and then try to display the count, it gives me the error "Attempt to reference field of non-structure array." Any help with what I'm doing wrong? Or how to add to the function so it doesn't count being greater as an inversion?
UPDATE: fixing the error of using left in place of right

Best Answer

Suppose we start with the example from your link:
array = [12 1 10 2 7 11 4 14 5 0 9 15 8 13 6 3];
To eliminate the zero entries, just do this:
array = array(array~=0);
A pretty good way of counting the inversions expresses them as a logical relation, e.g.,
array(2:end) > array(1)
ans =
0 0 0 0 0 0 1 0 0 1 0 1 0 0
Then you can just add up the 1's to get the number of inversions. You can do this in a loop:
count = 0;
for ii=1:length(array)-1
count = count + sum(array(ii+1:end)<array(ii));
end
There are more compact ways of doing this, but they're pretty cryptic.