how to make a sorting line by line?

2 次查看(过去 30 天)
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 个评论
madhan ravi
madhan ravi 2018-11-8
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
>>
sharifah shuthairah syed abdullah
you wont see the same answer as mine if you run the code.. because it will generate different answer every time we run the coding
i want the answer for to be like this
for example
Iter_zvalue =
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*
the answer should be like this
RS=
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 *9 5 9 7*
7 47882 *3 9 11 1*
8 48314 *3 4 11 6*
9 49508 *4 1 10 7*
10 50604 *4 3 5 7*
the number in the * for RS must be the same as the number in the * for Iter_zvalue .. however it when running the code it also sort

请先登录,再进行评论。

采纳的回答

Stephen23
Stephen23 2018-11-8
编辑:Stephen23 2018-11-8
Here are two methods that match your requested output. Your example input data:
>> 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

更多回答(0 个)

类别

Help CenterFile Exchange 中查找有关 Shifting and Sorting Matrices 的更多信息

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by