数学建模社区-数学中国
标题: Matlab---数据排序-2 [打印本页]
作者: 森之张卫东 时间: 2015-9-16 22:48
标题: Matlab---数据排序-2
答案:
这个程序必须提示使用者提供输入数据,对其进行排序,并输出排序结要。这个程序的设计过程如下:
1.陈述问题我们刚才没有指定要排序的数据类型。如果数据是数字,那么问题的陈述如下。开发一个程序,它能够读取在命令窗口中输入的任意类型的数字,用独立的自定义函数对读取的值进行排序,并在命令窗口写出排序结果。
2.定义输入输出量这个程序的输入值是在命令窗口键入的数字值。这个程序的输出量是写在命令窗口中的排序结果。
3.设计算法这个问题可以分解为三大步:
Read the input data into an array
Sort the data in ascending order
Write the sorted data
第一大步是读取数据。我们必须提示使用者输入输入数据的个数,然后读取数据。因为我们知道所要读取的数的确切个数,所以可以用for循环主读取合适的数据。它的伪代码如下:
Prompt user for the number of data values
Read the number of data values
Preallocate an input array
for ii = 1:number of values
Promptfor next value
Readvalue
end
下一步,我们必须要用独立的函数对数据进行排序。我们需要对数据进行naval-1次浏览,每一次找出一个最小值。我们将用一个指针来寻找每一次浏览的最小值。一量最小值被找到,如果它不在列表的顶端,它就与列表顶端的元素进行交换。伪代码如下:
for ii = 1:nvals -1
% Find the minimum value in a(ii) through a(nvals)
iptr ← ii
for jj =ii +1 to nvals
ifa(jj) < a(iptr)
iptr ← a(iptr)
end
end
% iptr now points to the min value, so swap a(iptr)
% with a(ii) if iptr ~= ii.
if ii ~=iptr
temp ← a(ii)
a(ii)← a(iptr)
a(iptr) ← temp
end
end
最后一步是输出排序结果。这个步骤的伪代码不需要重复。最终的伪代码是这三大步伪代码的联合。
4.把伪代码转化为MATLAB语言选择性排序的MATLAB代码如下所示:
function out = ssort(a)
%SSORT Selection sort data in ascending order
% Function SSORT sorts a numeric data set into
% ascending order. Note that the selection sort
% is relatively inefficient. DO NOT USE THIS
% FUNCTION FOR LARGE DATA SETS. Use MATLAB's
% "sort" function instead.
% Define variables:
% a --Input array to sort
% ii --Index variable
% iptr --Pointer to min value
% jj --Index variable
% nvals --Number of values in "a"
% out --Sorted output array
% temp --Temp variable for swapping
% Record of revisions:
% Date Programmer Description ofchange
% ==== ========== =====================
% 12/19/98 S. J. Chapman Original code
% Get the length of the array to sort
nvals = size(a,2);
% Sort the input array
for ii = 1:nvals-1
% Find the minimum value in a(ii) through a(n)
iptr =ii;
for jj =ii+1:nvals
ifa(jj) < a(iptr)
iptr = jj;
end
end
% iptr now points to the minimum value, so swapa(iptr)
% with a(ii) if ii ~= iptr.
if ii ~=iptr
temp= a(ii);
a(ii)= a(iptr);
a(iptr) = temp;
end
end
% Pass data back to caller
out = a;
调用选择性排序函数的程序如下:
% Script file: test_ssort.m
%
% Purpose:
% To read in an input data set, sort it intoascending
% order using the selection sort algorithm, and to
% write the sorted data to the Command window. This
% program calls function "ssort" to dothe actual
% sorting.
%
% Record of revisions:
% Date Programmer Description ofchange
% ==== ========== =====================
% 12/19/98 S. J. Chapman Original code
%
% Define variables:
% array --Input data array
% ii --Index variable
% nvals --Numberof input values
% sorted --Sorted data array
% Prompt for the number of values in the data set
nvals = input('Enter number of values to sort: ');
% Preallocate array
array = zeros(1,nvals);
% Get input values
for ii = 1:nvals
%Promptfor next value
string =['Enter value ' int2str(ii) ': '];
array(ii)=input(string);
end
% Now sort the data
sorted = ssort(array);
% Display the sorted result.
fprintf('\nSorted data:\n');
for ii = 1:nvals
fprintf('%8.4f \n',sorted(ii));
end
5.检测程序
为了检测这个程序,我们应当创建一个输入数据集,并运行这个程序。这个数据集应当包含由正负数混合组成,还有至少包括一个完全一样的值,以观察在这些情况下程序是否正常工作。
>> test_ssort
Enter number of values to sort: 6
Enter value 1: -5
Enter value 2: 4
Enter value 3: -2
Enter value 4: 3
Enter value 5: -2
Enter value 6: 0
Sorted data:
-5.0000
-2.0000
-2.0000
0.0000
3.0000
4.0000
对于我们检测的数据,程序给出了正确的结果。注意从正数到负数,还有重复值,这个程序工作正常。
作者: 森之张卫东 时间: 2015-9-16 22:48
排序非常重要,希望大家好好看看!!!
欢迎光临 数学建模社区-数学中国 (http://www.madio.net/) |
Powered by Discuz! X2.5 |