Alphabetical Sorting (case insensitive)

Heyy everyone, Having small issue with my code, where i want to assort an array of words in alphabetical order (with specific case insensitive sorting). My code is;

A = ["help" ; "MATLAB" ; "anyTIME" ; "matrix" ; "alGEBra"];
[M,N]=size(A);
for i = 2:N
    char = A(i,:);
    j = i-1;
      A_j=A(j+1,:);
      A(n+1:i)=A_j(A_j>char);
      j=j-max(A_th);
      A(j+1,:) = char;
end
disp(A);

it assorts the words, but not correctly. I can successfully do this sorting with numbers no problem. And i can sort the words alphabetically with the output case sensitive(have a couple different codes but wont attach them coz i dont want to bore you lovely people). but getting the output as alphabetical AND case insensitive is proving much more problematic (NOTE: i know you could use the sort function, but i want to do it with this one for loop). Any help is much appreciated <3

1 Kommentar

Stephen23
Stephen23 am 19 Apr. 2018
Bearbeitet: Stephen23 am 19 Apr. 2018
The first line
A = ["help" ; "MATLAB" ; "anyTIME" ; "matrix" ; "alGEBra"];
defines a 5x1 string array. Then you measure the size of that string array using
[M,N]=size(A);
So given that N==1, I don't see how this for loop will ever iterate even once:
for i = 2:N
Also, if A is really a string array, then char = A(i,:); is not a char vector but another string array.

Melden Sie sich an, um zu kommentieren.

Antworten (2)

Suraj Mankulangara
Suraj Mankulangara am 23 Apr. 2018

1 Stimme

Hello Aiden,
Here's a simple (and likely not very efficient) bubblesort implementation of case-insensitive string array sorting:
A = ["help" ; "MATLAB" ; "anyTIME" ; "matrix" ; "alGEBra"];
[M,N]=size(A);
for i = 1:M-1
for j = 1:M-1
curr = A(j);
next = A(j+1);
if upper(curr) > upper(next)
A(j) = next;
A(j+1) = curr;
end
end
end
disp(A);
I do not quite understand why you do not want to use the in-built MATLAB "sort" function to achieve this. There is no need to reinvent the wheel. Also, the in-built functions are likely to be much more efficient and optimized. You could do case-insensitive sorting using the "sort" function by converting all characters to uppercase, like this:
[~,idx]=sort(upper(A))
out=A(idx)
Adam Danz
Adam Danz am 20 Feb. 2025

0 Stimmen

> I want to assort an array of words in alphabetical order with case insensitive sorting
A = ["help" ; "MATLAB" ; "anyTIME" ; "matrix" ; "alGEBra"];
[~,sortIdx] = sort(lower(A));
ASort = A(sortIdx)
ASort = 5x1 string array
"alGEBra" "anyTIME" "help" "MATLAB" "matrix"

1 Kommentar

Walter Roberson
Walter Roberson am 21 Feb. 2025
I experimented with using the ComparisonMethod option to sort(), but it is not recognized for the case of sorting strings.

Melden Sie sich an, um zu kommentieren.

Kategorien

Gefragt:

am 19 Apr. 2018

Kommentiert:

am 21 Feb. 2025

Community Treasure Hunt

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

Start Hunting!

Translated by