Сортировка двумерного массива Char в альфа-порядке? - PullRequest
0 голосов
/ 17 марта 2012

Я пытаюсь отсортировать двумерный массив имен в алфавитном порядке, но не могу выполнить шов, чтобы заставить его работать.

Я использую пузырьковую сортировку по буквам, и это сортировка 1-гобуква имен в порядке, но 3 имени начинаются с той же буквы, и они все еще не в порядке.

Я пробовал гуглить и прочее, но каждый тинг говорит использовать векторы или строковые переменные ... но яя ограничен использованием 2-мерных массивов символов.

Есть идеи?

Вот код, который у меня есть на данный момент, который работает почти так:получилось !!!

http://ideone.com/ugLZ7

Вот код ... (как мне разместить код в этой форме?)

Это почти точното же самое, но с использованием полных сравнений строк и копий.

Ответы [ 3 ]

1 голос
/ 17 марта 2012

Вы, кажется, неправильно поняли сортировку пузырьков. Во-первых, предполагается, что вы сравниваете только смежные элементы, а во-вторых, вам нужно проверить за пределами первого символа, соответствует ли два элемента. Я сделал необходимые изменения, и соответствующая часть правильно работающего кода:

int n=11,k,l;
for(int i=0;i<n-1;i++){
    for(int j=0; j<n-i-1; j++){
        l = min(strlen(heroes[j]),strlen(heroes[j+1]));
        for(k=0;k<l;++k)
            if(heroes[j+1][k]<heroes[j][k]){ swap(heroes[j],heroes[j+1]); break; }
            else if(heroes[j+1][k]>heroes[j][k]) break;
        if(k==l and strlen(heroes[j])>strlen(heroes[j+1]))
            swap(heroes[j],heroes[j+1]);
        }
    }

PS: вам не нужно выводить массив, используя циклы for, которые имеют 12 итераций. Последняя итерация просто производит значения мусора.

1 голос
/ 03 октября 2016

Использование функции strcmp и метода сортировки пузырьков:

char temp[1][17];
int size = 11;
for(int i=1; i<size; i++)
{
    for(int j=0; j<size-i;j++)
    {
        if(strcmp(heroes[j],heroes[j+1]) > 0)
        {
            strcpy(heroes[0], heroes[j+1]);
            strcpy(heroes[j+1], heroes[j]);
            strcpy(heroes[j], heroes[0]);
        }
    }
}
1 голос
/ 17 марта 2012

Попробуйте и положитесь на стандартную библиотеку, чтобы сделать тяжелую работу за вас, то, что вы пишете, действительно C с std::cout и не поощряется.

#include <vector>
#include <iostream>
#include <iterator>
#include <algorithm>

int main()
{
   std::vector<std::string> > heroes { 
        "Captain America", "Thor", "Wolverine", "Cyclops", 
        "Goliath", "Beast", "Angel", "Colossus", "Hulk", 
        "Quicksilver", "Ironman"
    };

    std::sort(heroes.begin(), heroes.end());

    std::copy(heroes.begin(), heroes.end(),
        std::ostream_iterator<std::string>(std::cout, ", "));
    return 0;
}

Обратите внимание: если у вас нет C ++ 11, вам нужно будет добавить элементы в вектор вручную, используя:

std::vector<std::string> > heroes;
heroes.push_back("Captain America");
...
...