Matlab如何给数组元素排序
问题
给定的数组,需要进行排序,一般的排序可以再Excel上完成,但对于字符串或复杂的数组的排序就无法完芤晟踔肿成了,就需要更方便的数据进行排序了,如何对数组元素进行排序下面将举例说明。
解决方法
讲一个数据矩阵随机重新排序
%程序如下:
%%%%%程序开始%%%%%%
data = [1 5 9 8 7; 2 6 4 3 0];
index = randperm(10);
data = data(reshape(index, size(data)))
%%%%%程序结束%%%%%
输出结果为:
将一组打乱的字符串重新排序
%程序如下:
%%%%%程序开始%%%%%%
data = {'0-0-0.xls' '1-0-0.xls' '10-0-0.xls' ...
'11-0-0.xls' '12-0-0.xls' '13-0-0.xls' '14-0-0.xls' ...
'15-0-0.xls' '16-0-0.xls' '17-0-0.xls' '18-0-0.xls' ...
'19-0-0.xls' '19-39-52.xls' '2-0-0.xls' '20-0-0.xls' ...
'21-0-0.xls' '22-0-0.xls' '23-0-0.xls' '23-0-29.xls' ...
'3-0-0.xls' '4-0-0.xls' '5-0-0.xls' '6-0-0.xls' ...
'7-0-0.xls' '8-0-0.xls' '9-0-0.xls'}; %原始的字符串单元数组
remain = data; %remain用于保存提取数值后的字符串,用于再次提取其中剩余的数值
num = zeros(length(data), 3); %用于保存每次提取的数值
[str_num1, remain] = strtok(remain, '-'); %提取第1组数值
num(:, 1) = str2double(str_num1)';
[str_num2, remain] = strtok(remain, '-'); %提取第2组数值
num(:, 2) = str2double(str_num2)';
[str_num3, remain] = strtok(remain, '.'); %提取第3组数值
num(:, 3) = str2double(str_num3)';
%%%%%%%%以下为方法1的实现代码%%%%%%%%%%%%%
[num2, index1] = sortrows(num, [1 2 3]); %依次按第1列、第2列、第3列的数值进行排序
data2 = data(index1)
%%%%%%%%以下为方法2的实现代码%%%%%%%%%%%%%
% num3 = num(:, 1) * 10000 + num(:, 2) * 100 + num(:, 3); %根据数值的权重,获得新数值
% [num4, index2] = sort(num3); %新数值排序
% data3 = data(index2) %获得最终字符串单元数组
%%%%%程序结束%%%%%
输出结果为: