how to make a sorting line by line?
4 views (last 30 days)
Show older comments
sharifah shuthairah syed abdullah
on 8 Nov 2018
Commented: sharifah shuthairah syed abdullah
on 9 Nov 2018
i want to sort the value by line not sorting all number . below is my coding and example what i want
%%read data
clc
clear
%global f d;
%flow
f=[ 0 90 10 23 43 0 0 0 0 0 0 0
90 0 0 0 0 88 0 0 0 0 0 0
10 0 0 0 0 0 26 16 0 0 0 0
23 0 0 0 0 0 0 0 0 0 0 0
43 0 0 0 0 0 0 0 0 0 0 0
0 88 0 0 0 0 0 0 1 0 0 0
0 0 26 0 0 0 0 0 0 0 0 0
0 0 16 0 0 0 0 0 0 96 0 0
0 0 0 0 0 1 0 0 0 0 29 0
0 0 0 0 0 0 0 96 0 0 0 37
0 0 0 0 0 0 0 0 29 0 0 0
0 0 0 0 0 0 0 0 0 37 0 0];
%distance
d=[ 0 36 54 26 59 72 9 34 79 17 46 95
36 0 73 35 90 58 30 78 35 44 79 36
54 73 0 21 10 97 58 66 69 61 54 63
26 35 21 0 93 12 46 40 37 48 68 85
59 90 10 93 0 64 5 29 76 16 5 76
72 58 97 12 64 0 96 55 38 54 0 34
9 30 58 46 5 96 0 83 35 11 56 37
34 78 66 40 29 55 83 0 44 12 15 80
79 35 69 37 76 38 35 44 0 64 39 33
17 44 61 48 16 54 11 12 64 0 70 86
46 79 54 68 5 0 56 15 39 70 0 18
95 36 63 85 76 34 37 80 33 86 18 0];
[r,c]=size(f);
max_i=r;
max_j=r;
max_k=r;
max_q=r;
MaxIt=10;
cp=0.4; % Crossover Percentage
np=2*round(cp*r/2); % Number of Offsprings (Parents)
% % Create Empty Structure
empty_individual.P1=[];
empty_individual.P2=[];
% Create Population Matrix (Array)
pop=repmat(empty_individual,r,1);
for no=1:MaxIt
ID=randperm(r); %PERMUTATION r NOMBOR ..r = 3, 1 2 3, 1 3 2...
x=zeros(r,r);
n=length(ID);
x1=ID;
for i=1:n
for j=1:r
x(j,x1(j))=1;
B(no).mat=x; % keep memory when 0,1 permuation are make in (i),BINARY for RELATION
end
x=zeros(r,r);
end
z=0;xa=B(no).mat;
for i=1:max_i
for j=1:max_j
for k=1:max_k
for q=1:max_q
z= z+ f(i,k).*d(j,q).*xa(i,j).*xa(k,q);
end
end
end
end
no;
G(no,:)=[no z]; %STOR ALL VALUE Z 1 HINGGA MaxI IN MATRIX G
F(no,:)=[no z ID]; %STOR ALL VALUE Z and ID, 1 until MaxIt IN MATRIX F
end
%end
format compact % Suppresses the display of blank lines.
%
zmin=min(F(:,2));
zmax=max(F(:,2));
Iter_zvalue = F %matrix F have no iter, z and ID
% % Sort Population
%
RS = sort(F) % sorted from max to min
i want to sort F by line.. for example
before sorting
1 47764 7 9 4 5 2 1 11 10
2 48878 4 5 10 8 12 11 1 9
3 46388 9 6 4 2 1 10 3 8
4 32014 6 4 12 7 5 1 11 2
5 43468 11 3 8 9 4 10 6 12
6 36962 11 10 4 3 6 5 1 12
7 45400 4 1 10 12 7 11 5 8
8 39032 1 5 9 2 4 10 3 7
9 45742 4 2 5 11 9 3 6 1
10 37436 11 5 3 4 9 10 6 2
After sorting
1 32014 1 1 3 2 1 1 1 1
2 36962 4 2 4 2 2 1 1 2
3 37436 4 3 4 3 4 3 3 2
4 39032 4 4 4 4 4 5 3 7
5 43468 6 5 5 5 5 10 5 8
6 45400 7 5 8 7 6 10 6 8
7 45742 9 5 9 8 7 10 6 9
8 46388 11 6 10 9 9 10 6 10
9 47764 11 9 10 11 9 11 11 12
10 48878 11 10 12 12 12 11 11 12
what i want is that the value in bold just follow the however when i do the sort all the bold number also change.. how can i code so that the bold number did not change, just follow the big number in front.
2 Comments
madhan ravi
on 8 Nov 2018
honestly I don't see 1 32014 1 1 3 2 1 1 1 1
Iter_zvalue =
Columns 1 through 6
1 45270 10 6 1 8
2 49508 4 1 10 7
3 45194 10 4 9 11
4 45514 2 11 4 10
5 50604 4 3 5 7
6 31486 9 11 10 4
7 47882 3 9 11 1
8 48314 3 4 11 6
9 33334 10 5 9 12
10 35338 12 2 7 4
Columns 7 through 12
7 9 12 2 5 11
3 6 8 2 9 5
6 12 8 5 7 3
5 8 6 1 12 3
11 2 9 6 10 8
6 12 8 1 2 5
7 12 2 6 5 8
2 12 1 8 10 9
1 11 2 4 3 7
10 9 5 6 8 11
Columns 13 through 14
3 4
11 12
2 1
9 7
12 1
7 3
4 10
7 5
8 6
3 1
RS =
Columns 1 through 6
1 31486 2 1 1 1
2 33334 3 2 4 4
3 35338 3 3 5 4
4 45194 4 4 7 6
5 45270 4 4 9 7
6 45514 9 5 9 7
7 47882 10 6 10 8
8 48314 10 9 10 10
9 49508 10 11 11 11
10 50604 12 11 11 12
Columns 7 through 12
1 2 1 1 2 3
2 6 2 1 3 3
3 8 2 2 5 5
5 9 5 2 5 5
6 9 6 4 7 7
6 11 8 5 8 8
7 12 8 6 9 8
7 12 8 6 10 9
10 12 9 6 10 11
11 12 12 8 12 11
Columns 13 through 14
2 1
3 1
3 1
4 3
7 4
7 5
8 6
9 7
11 10
12 12
>>
Accepted Answer
Stephen23
on 8 Nov 2018
Edited: Stephen23
on 8 Nov 2018
>> M = [1,45270,10,6,1,8;2,49508,4,1,10,7;3,45194,10,4,9,11;4,45514,2,11,4,10;5,50604,4,3,5,7;6,31486,9,11,10,4;7,47882,3,9,11,1;8,48314,3,4,11,6;9,33334,10,5,9,12;10,35338,12,2,7,4]
M =
1 45270 10 6 1 8
2 49508 4 1 10 7
3 45194 10 4 9 11
4 45514 2 11 4 10
5 50604 4 3 5 7
6 31486 9 11 10 4
7 47882 3 9 11 1
8 48314 3 4 11 6
9 33334 10 5 9 12
10 35338 12 2 7 4
Method one: sortrows:
>> Z = sortrows(M,2);
>> Z(:,1) = 1:size(Z,1)
Z =
1 31486 9 11 10 4
2 33334 10 5 9 12
3 35338 12 2 7 4
4 45194 10 4 9 11
5 45270 10 6 1 8
6 45514 2 11 4 10
7 47882 3 9 11 1
8 48314 3 4 11 6
9 49508 4 1 10 7
10 50604 4 3 5 7
Method two: sort and indexing:
>> [Z,idx] = sort(M(:,2),1);
>> Z = [M(:,1),Z,M(idx,3:end)]
Z =
1 31486 9 11 10 4
2 33334 10 5 9 12
3 35338 12 2 7 4
4 45194 10 4 9 11
5 45270 10 6 1 8
6 45514 2 11 4 10
7 47882 3 9 11 1
8 48314 3 4 11 6
9 49508 4 1 10 7
10 50604 4 3 5 7
More Answers (0)
See Also
Categories
Find more on Shifting and Sorting Matrices in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!