tags:

views:

84

answers:

7

so i have a list of string
{test,testertest,testing,tester,testingtest}
I want to sort it in descending order .. how do u sort strings in general ? Is it based on the length or is it character by character ??
how would it be in the example above ?? I want to sort them in a descending way.

+2  A: 

I would sort it like this:

testingtest
testing
testertest
tester
test

murze
to jleedev: sorry, you need to rework that edit :P
DK
If I understand the question, the OP was asking for descending order. The example here is ascending.
Mark Wilkins
+1  A: 

Assuming C#

string[] myStrings = {"test","testertest","testing","tester","testingtest"};
Array.Sort(myStrings);
Array.Reverse(myStrings);
foreach(string s in myStrings)
{
     Console.WriteLine(s);
}

Not always an ideal way to do it - you could implement a custom comparer instead - but for the trivial example you asked about this is probably the most logical approach.

ZombieSheep
why all the hassle? you could simply write: `string[] sortedArray = myStrings.OrderByDescending(x => x);`
Paulo Santos
Providing the OP is using a version that supports it (ie. has Linq), your method should work. Without having any info on language / version, I gave an example that should work on the bulk of installations.
ZombieSheep
A: 

in Java you can use natural ordering with

java.util.Collections.sort(list);

the make it descending

java.util.Collections.reverse(list);

or create your own Comparator to do the reverse sorting.

fuzzy lollipop
+2  A: 

No matter what language you’re in, there’s a built-in sort function that performs a lexicographical order, which returns

['test','tester','testertest','testing','testingtest']

for your example. If I wanted this reversed, I would just say reversed(sorted(myList)) in Python and be done with it. If you look to your right you can see plenty of related questions that require a more specialized ordering method (for numbers, dates, etc.), but lexicographic order works on strings containing any kind of data.

Here’s how it works:

compare(string A, string B):
    if A and B are both non-empty:
        if A[0] == B[0]:
            // First letters are the same; compare by the rest
            return compare(A[1:], B[1:])
        else:
            // Compare the first letters by Unicode code point
            return compare(A[0], B[0])
    else:
        // They were equal till now; the shorter one shall be sorted first 
        return compare(length of A, length of B)
jleedev
+1 for lexicographical order link
DK
+1  A: 

In computer science strings are usually sorted character by character, with the preferred sort order being (for a standard english character set):

  • Null characters first
  • Followed by whitepsace
  • Followed by symbols
  • Followed by numeric characters in obvious numerical order
  • Followed by alphabetic characters in obvious alphabetical order

When sorting characters generally lowercase characters come before uppercase characters.

So for example if we were to sort / compare:

test i ng
test e r

Then "tester" would come before "testing" - the first different character in the string is the 5th one, and "e" comes before "i".

Similarily if we were to compare:

test
testing

Then in this case "test" would come first - once again the strings are identical until the 5th character, where the string "test" ends (i.e. no character) which becomes before any alphanumerical character.

Note that this can produce some counter-intutive results when dealing with numbers - for example try sorting the strings "50" and "100" - you will find that "100" comes before "50". Why? because the strings differ at character 1 and "5" comes after "1".

In nearly all languages there is a function which will do all of the above for you!

You should use that function instead of trying to sort strings yourself! For example:

// C#
string[] myStrings = {"test","testertest","testing","tester","testingtest"};
Array.Sort(myStrings);
Kragen
A: 

When comparing two strings to see which sorts first, the comparison is typically done on a character by character basis. If the characters in the first position (e.g., t in your example) are identical, you move to the next character. When two characters differ, that "may" define which string is considered "greater".

However, depending on the locale used and a number of other factors, it is possible for later characters in the two strings being compared to override a difference in an earlier character. For example, in some collations, the diacritics on letters are considered to be of secondary weight. So a primary difference in a later character can override the secondary difference.

When two strings are otherwise identical but one is longer, the longer one is typically considered to be "greater". When sorting in descending order, the "greater" of two strings is sorted first.

Mark Wilkins
A: 

Do you want to know if test should appear after tester in a descending order? Or are you particularly interested in sorting strings with similar prefixes?

If it's the later, I'd suggest a Trie if the input tends to grow big time.

Fede