На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
Модераторы: Qraizer, Hsilgos
  
> Как отсортировать массив строк? , Нужна помощь!
    Задача такая, нужно отсортировать массив фамилий. Элементы массива типа char.
    Точнее, не могу разобраться с помощью каких условий выбирать элементы...

    HELP!
      по алфавиту?

      ну тогда ты наверное пользуешь массив указателей на char-ы? угадал?
      Если фамилия гарантировано начинается на заглавную букву, то коды букв идут в возрастающем порядке. точные цифры не помню, глянь таблицу ascii символов; ты просто сортируешь записи в порядке возрастания - сначала по первой букве, потом (пока не встретишь следующую) по второй буквы..
      и т.д. используй это свойство - в алфавитном порядке коды букв возрастают. Продолжать?
      Сообщение отредактировано: AQL -
        К примеру, можно так
        ExpandedWrap disabled
          #include <stdio.h>
          #include <stdlib.h>
          #include <string.h>
           
          void sort(char *arr[], int size)
          {
              char* tmp;  
              
              for (int i = 0; i < size; i++)
                  for (int j = 0; j < size; j++)
                      if (strcmp(arr[i], arr[j]) < 0)
                      {
                          tmp    = arr[i];
                          arr[i] = arr[j];
                          arr[j] = tmp;
                      }
          }
           
          void main()
          {
              char *str[] = {"abdh", "acdg", "acba", "abcd", "abce"};    
              
              sort(str, 5);
              for (int i = 0; i < 5; i++)
                  printf("%s\n", str[i]);
          }
        Сообщение отредактировано: Dalet -
          Наверно проще всёж так:
          ExpandedWrap disabled
             
            qsort( array, size_array, sizeof( char*), strcmp);
            Цитата AlexSm @ 29.12.03, 08:23
            Наверно проще всёж так:
            ExpandedWrap disabled
               
              qsort( array, size_array, sizeof( char*), strcmp);

            Ага действитеьно что ж может проще быть слова qsort :D
            2 Dalet:А если будет например строка "aahaр" и "aaha".И алгоритм не работает :P.
            2 Gohst: Можно использовать опять же тот же qsort только брать в качестве элемента сравнения первые четыре буквы строки.Или как я когда то делал:cортируеш строки по первой букве qsort-ом,выделяеш массив из превых отсартированных символов сортируеш их.В итоги все реализуется двумя рекурсивными функциями.
            :rolleyes:
              Цитата Zveruga @ 29.12.03, 21:54
              2 Dalet:А если будет например строка "aahaр" и "aaha".И алгоритм не работает :P.

              Сам-то понял, чего сказал?
                ExpandedWrap disabled
                   
                   
                  #include <algorithm>
                   
                  bool strless(const char* elem1,const char* elem2 )
                  {
                     return strcmp(elem1,elem2)<0;
                  }
                   
                   
                  void main()
                  {
                      char *str[] = {"abdh", "acdg", "acba", "abcd", "abce", 0};    
                   
                      std::sort(str, 0, strless);
                  }
                    
                  Цитата Dalet @ 29.12.03, 19:30
                  Цитата Zveruga @ 29.12.03, 21:54
                  2 Dalet:А если будет например строка "aahaр" и "aaha".И алгоритм не работает :P.

                  Сам-то понял, чего сказал?

                  Бррр sorry клеманула :D .
                  Одно что работать будет не слишком быстро :rolleyes:
                  0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                  0 пользователей:


                  Рейтинг@Mail.ru
                  [ Script execution time: 0,0269 ]   [ 16 queries used ]   [ Generated: 6.05.24, 10:36 GMT ]