Sorting array of chars alphabetically then by length

sort an array of strings according to string lengths in c
how to sort a list alphabetically in c++
sort array of strings alphabetically c++
sort the strings based on the length of the string in an array
sort an array of strings according to string lengths in c++
sort an array of strings according to string lengths java
sort the array of strings according to alphabetical order defined by another string
sort array of strings by length java

I have an array of structs where I keep track of how many times each unique word was seen in a given text:

struct List {
  char word[20];
  int repeat;
};

Now I need to sort this:

as             6
a              1
appetite       1
angry          1
are            2
and            4
...

To this:

a            1
as           6
and          4
are          2
angry        1
appetite     1
...

(By alphabetically I mean only by first letter) So far, I have come up with this:

for (i = 0; i < length - 1; i++) {
        min_pos = i;
        for (j = i + 1; j < length; j++) // find min
            if (array[j].word[0] < array[min_pos].word[0]) {
                min_pos = j;
            }
            swap = array[min_pos]; // swap
            array[min_pos] = array[i];
            array[i] = swap;
        }

This code works perfectly for sorting alphabetically, but I just can't write proper code to sort BOTH alphabetically and by length.

Others have pointed out that there are faster and cleaner ways to sort. But if you want to use your own selection sort, as you've written, then you just need to make a few changes to your code.

Separate the "do I need to swap" logic from the swapping logic itself. Then the code becomes much cleaner and it's more clear where to add the extra check.

I've only copied the inner loop here. You'd want to replace your existing inner loop with this one. I'm not clear on why you need swap_pos and min_pos, so I've left the semantics alone.

    for (j = i + 1; j < length; j++) { // find min
        // first, determine whether you need to swap
        // You want to swap if the first character of the new word is
        // smaller, or if the letters are equal and the length is smaller.
        bool doSwap = false;
        if (array[j].word[0] < array[min_pos].word[0]) {
            doSwap = true;
        }
        else if (array[j].word[0] == array[min_pos].word[0] &&
                 strlen(array[j].word) < array[min_pos].word) {
            doSwap = true;
        }

        // do the swap if necessary
        if (doSwap) {
            swap_pos = j;
            swap = array[min_pos]; // swap
            array[min_pos] = array[i];
            array[i] = swap;
        }
    }

To more clearly illustrate the necessary logic changes, I've purposely avoided making major style changes or simple optimizations.

Python Sorting | Python Education, How do you sort a list of strings based on length? We are given an array of strings, we need to sort the array in increasing order of string lengths. A simple solution is to write our own sort function that compares string lengths to decide which string should come first. Below is the implementation that uses Insertion Sort to sort the array. // according to lengths. // implements Insertion Sort.

Make a comparator function.

Add an operator< to your List:

bool operator<(const List &lhs) const {
    if(word[0] != lhs.word[0]) {
        return word[0] < lhs.word[0];
    }
    return strlen(word) < strlen(lhs.word);
}

And now use this operator to sort, using whichever algorithm strikes your fancy.

Program to sort a string in alphabetical order, Which method will arrange the elements of an array in alphabetical order? Sort the array of strings according to alphabetical order defined by another string. Given a string str and an array of strings strArr[], the task is to sort the array according to the alphabetical order defined by str. Note: str and every string in strArr[] consists of only lower case alphabets.

You can pass a lambda to sort to do this:

sort(begin(array), end(array), [](const auto& lhs, const auto& rhs){ return *lhs.word < *rhs.word || *lhs.word == *rhs.word && (strlen(lhs.word) < strlen(rhs.word) || strlen(lhs.word) == strlen(rhs.word) && strcmp(lhs.word, rhs.word) < 0); });

Live Example

Which method will arrange the element of an array in alphabetical , Firstly, using just sorted will not sort alphabetically, look at your output I am pretty sure L does not come before a . What you are currently  Given a string of lowercase characters from ‘a’ – ‘z’. We need to write a program to print the characters of this string in sorted order. A simple approach will be to use sorting algorithms like quick sort or merge sort and sort the input string and print it. Time Complexity: O (n log n), where n is the length of string.

Use tuple lexicographical compare operators

An easy way to not write this condition is to

#include <tuple>

Then std::tie can be used:

std::tie(array[j].word[0], array[j].repeat) < std::tie(array[min_pos].word[0], array[min_pos].repeat)

This works because std::tie creates a tuple of lvalue references to its arguments. (Which means std::tie requires variables. If You want to compare results from functions std::make_tuple or std::forward_as_tuple would be better)

And std::tuple has operators which

Compares lhs and rhs lexicographically, that is, compares the first elements, if they are equivalent, compares the second elements, if those are equivalent, compares the third elements, and so on.

And the above description is also the idea how to make a comparison of more than value.

Sort string array first on length then alphabetically in Python 3 , A simple solution is to write our own sort function that compares string lengths to Count of strings in the first array which are smaller than every string in the  The sort() method sorts the items of an array. The sort order can be either alphabetic or numeric, and either ascending (up) or descending (down). By default, the sort() method sorts the values as strings in alphabetical and ascending order. This works well for strings ("Apple" comes before "Banana").

Sort an array of strings according to string lengths, Given a string str and an array of strings strArr[], the task is to sort the array according to the alphabetical order defined by str. Now, this map will act as the new alphabetical order of the characters. in the map i.e. if character c1 appears before character c2 in str then c1 < c2. for ( int i = 0; i < min(x.size(), y.size()); i​++) {. The sort is case-sensitive. For more information on sorting character and string arrays, see Sort Order for Character and String Arrays. If A is a string array, then sort reorders the elements of the array, but does not reorder characters within the strings.

Sort the array of strings according to alphabetical order defined by , Four different ways to sort characters in a string in Java with example. toCharArray();; //4; for (int i = 0; i < charArray.length; i++) {; for (int j = i + 1; Then, we have passed one lambda to compare the characters in the second  Sometimes we need to sort all characters in a string alphabetically. It creates a different string variable since String is immutable in Java. For example, String ‘albert’ will become ‘abelrt’ after sorting. In this Java example, we will learn how to sort the characters of a string alphabetically in different ways. Let’s take a look :

4 different ways to Sort String characters Alphabetically in Java , To sort a given array of strings into lexicographically increasing order or into an order in which the string with the lowest length appears first, a sorting function with of distinct characters present in them, then the lexicographically smaller string  C++: How do i sort array of Strings alphabetically in C++? I am trying to sort array of string (2D array of Characters) using bubble sort. and I am stuck at this.

Comments
  • This would be easier by using std::string. You could use std::map<std::string, int> to associate words with frequencies. The sorting would be handled for you. Natural sorting of std::string is by letter, then length, e.g. `"aa" before "ba".
  • It's unclear here what the purpose of swap_pos is. Is it supposed to be min_pos?
  • Yes, forgot to change it back.
  • The second for - where is it's opening brace? The first for where is it's closing brace?
  • Ended up putting your loop in do ... while (doSwap) Works like a charm, thank you.
  • @enjoy I don't think that conditional loop is a good idea with selection sort. The general case of selection sort doesn't allow for an early out.
  • Actually, I have this: bool loop; int n = 2; do { ... } while ((loop && n) || n--); So it runs several times to sort everything correctly. I am 100% sure this code is awful, but I am very new to programming and pretty happy with this.
  • Great idea. I would combine it with my idea to: Use tuple lexicographical compare operators. (answer below)
  • OP wants length, no repeat
  • All right, I've added your code and tuple library to my project, but nothing happens. Like it just doesn't execute. I've read about std::tie for a while, but I guess I missed something.
  • @enjoy where did You use this code? In the if statement?
  • @Jarod42 I thought that repeat was the other variable to be compared. I modified the answer to suggest using make_tuple when function results have to be compared.
  • I would combine this answer and use it in the "Make a comparator function."