How do you write a function that will sort a one-dimensional array using looping and conditionals without using the sort or sortrow commands?
조회 수: 14 (최근 30일)
이전 댓글 표시
In this problem, you are asked to write a function that will sort a one-dimensional array using looping and conditionals without using the sort or sortrow commands. Create a function called MySort.m, which takes as an input a 1-dimensional vector and sorts the values in a specifed order (ascending or descending). If no order is specifed, the default should be to sort in ascending order.
Function Header: function output = MySort(input, method)
The second input to the MySort, method, should be a string 'ascending' or 'descending'. If the function is called with only one argument, i.e. output = MySort(input), then the data in input should be sorted in ascending order. Hint: Use the variable nargin inside MySort and consider making use of the min and max functions and for or while when sorting.
% Test Cases
>> x = [1 5 3 5 2 10];
>> y1 = MySort(x,'ascending')
y1 =
1 2 3 5 5 10
>> y11 = MySort(x)
y11 =
1 2 3 5 5 10
>> y2 = MySort(x, 'descending')
y2 =
10 5 5 3 2 1
댓글 수: 2
Matt J
2012년 10월 8일
It looks like your MySort implementation is working correctly, given the test cases you've provided. What is the problem?
채택된 답변
Sean de Wolski
2012년 10월 8일
편집: Sean de Wolski
2012년 10월 8일
This oughtta do it. (And steal the win from Greg :) )
function v2 = MySort(v,direction)
[~,~,idx] = unique(v(:));
v2 = cell2mat(accumarray(idx,v(:),[],@(x){x}));
if nargin==2&&strcmp(direction,'descending')
v2 = flipud(v2);
end
for ii = 1
v2 = reshape(v2,size(v));
end
댓글 수: 1
John D'Errico
2012년 10월 8일
Well, it does use a loop, and it does have a test, and it does not explicitly call sort or sortrows. I gotta give it to Sean. :)
추가 답변 (3개)
Greg Heath
2012년 10월 8일
편집: Greg Heath
2012년 10월 8일
Find minx = min(x) at index indmin
x(indmax) = [];
y1 = [ y1 minx ];
Hope this helps enough so that you will formally accept my answer.
Greg
댓글 수: 1
John D'Errico
2012년 10월 8일
While this offers a poor scheme that can work when coupled with the proper logic, it must be made to work when the array has duplicates, which will take some careful logic. It is poor because it is terribly inefficient, doing far more tests than one should do in a sort. Note also that that this scheme has arrays that are constantly changing in size, so it will be an allocation nightmare.
Jose Canseco
2012년 10월 8일
편집: Jose Canseco
2012년 10월 8일
댓글 수: 2
John D'Errico
2012년 10월 8일
But that won't sort the array. It won't even work properly to do what you think it does.
Sean de Wolski
2012년 10월 8일
Here's a hint: assume it's 'ascending' and sort it this way. At the end, you can reverse it if you have to.
참고 항목
카테고리
Help Center 및 File Exchange에서 Shifting and Sorting Matrices에 대해 자세히 알아보기
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!