MATLAB: While Loop Keep running non stop !!

counterduplicateforlooprepeatedreshapingswappingwhile

i have a matrix A
A=[ 1 1 2
3 3 4
4 4 5
5 5 6
6 6 7
7 7 8
8 8 9
9 9 10
10 10 11
12 12 13
13 13 14
15 15 16
16 16 17
17 17 18
18 2 19
19 19 20
20 20 21
21 21 22
22 3 23
23 23 24
24 24 25
26 26 27
27 27 28
28 28 29
28 29 30
30 30 31
31 31 32
33 21 8
34 9 15
35 22 12
36 18 33
37 25 29]
i want to make a loop which detect repeated values of column no. 3 then swap the repeated value of column 3 with column 2 from bottom to up and keep swapping going up until no repeated values in column 3
i made somthing like that
[c,ia,ib] = unique(A(:,3));
FF=length(ia)-1;
Ncount = histc(A(:,3), c);
for i=FF:-1:1
Ncount = histc(A(:,3), c);
while Ncount(i)==2
A(i,[2,3])=A(i,[3,2]);
Ncount = histc(A(:,3), c);
end
end
but the loop keep running and i think that because of two Ncount=2 at row 28 (29 is repeated in row 37 and 28) and Ncount=2 at row 7 (8 is repeated at row 7 and 33) !!
please help !

Best Answer

Ok, I think I got something working. The while loop was a fine choice, it was more a matter of indexing and changing things together. Also, it was impossible to start changing values from the back, because you ran into an infinite loop.
[c,ia,ib] = unique(A(:,3));
Ncount = histc(A(:,3), c);
if sum(Ncount >= 2) >0;
c2 = c(Ncount >= 2);
while sum(Ncount >= 2) > 0
A(find(ismember(A(:,3),c2),max(Ncount),'first'),[3,2]) = A(find(ismember(A(:,3),c2),max(Ncount),'first'),[2,3]);
[c,ia,ib] = unique(A(:,3));
Ncount = histc(A(:,3), c);
c2 = c(Ncount >= 2);
end
end