Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
-Arabella-
0 / 0 / 0
Регистрация: 20.10.2013
Сообщений: 233
#1

Не работает сортировка по алфавиту - C++

28.05.2014, 08:01. Просмотров 253. Ответов 6
Метки нет (Все метки)

Здравствуйте. Я пытаюсь отсортировать по алфавиту фамилии (структуры), но сортировка вставками не работает, у меня при выводе самый первый в списке пропадает, остальные выводятся в порядке ввода. Помогите, пожалуйста, найти ошибку.
Алгоритм сортировки
C++
1
2
3
4
5
6
7
8
9
10
11
for(i=1;i<n;i++)
{
strcpy(st.FIO,alp[i].FIO);
for(j=i-1;j>=0 && strcmp(alp[j].FIO,st.FIO)>0;j--)
strcpy(alp[j+1].FIO,alp[j].FIO);
st.at=alp[j+1].at;
st.time=alp[j+1].time;
st.ves=alp[j+1].ves;
st.shtuk=alp[j+1].shtuk;
printf("\n %25s  |  %5.2f  |  %2d  |  %2d  |  %5.2f", st.FIO,st.time,st.ves,st.shtuk,st.at);
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.05.2014, 08:01     Не работает сортировка по алфавиту
Посмотрите здесь:

Сортировка строки по алфавиту - C++
Здравствуйте, нужно отсортировать строку по алфавиту. Подскажите, как это реализовать? Есть массив const int n =1000; char* a = new...

Сортировка источников по алфавиту - C++
К подготовленной статье автор приложил список использованной литературы, но расположил издания в порядке появления ссылок на них в тексте....

сортировка предложения по алфавиту - C++
Всем привет))помогите мне пожалуйста разобраться...задание было таковым - дана прога которая сортирует слова из введенного текста по...

Сортировка строк по алфавиту в VS - C++
Одно из подзаданий- отсортировать информацию за алфавитом смотря на Имя. Не совсем понимаю, как это сделать со строками #include...

Сортировка строк по алфавиту - C++
Здравствуйте. Имеется вот такая структура (для удобства оставил в ней только один элемент, с которым работаю). Как видно из кода,...

Сортировка текста по алфавиту - C++
Разработать программу который произвольный текст будет сортировать по алфавиту. Чтение происходит текста и запись в файл после сортировки.

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
zss
Модератор
Эксперт С++
6321 / 5905 / 1913
Регистрация: 18.12.2011
Сообщений: 15,181
Завершенные тесты: 1
28.05.2014, 08:18     Не работает сортировка по алфавиту #2
строки 6-9 находятся вне цикла по j
-Arabella-
0 / 0 / 0
Регистрация: 20.10.2013
Сообщений: 233
28.05.2014, 19:09  [ТС]     Не работает сортировка по алфавиту #3
zss, Я добавила скобки, но все равно первый пропадает, а остальные в порядке ввода выводятся, т. е. сортировка не происходит
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
for(i=1;i<n;i++)
{
strcpy(st.FIO,alp[i].FIO);
for(j=i-1;j>=0 && strcmp(alp[j].FIO,st.FIO)>0;j--)
{
strcpy(alp[j+1].FIO,alp[j].FIO);
st.at=alp[j+1].at;
st.time=alp[j+1].time;
st.ves=alp[j+1].ves;
st.shtuk=alp[j+1].shtuk;
}
printf("\n %25s  |  %5.2f  |  %2d  |  %2d  |  %5.2f", st.FIO,st.time,st.ves,st.shtuk,st.at);
}
zss
Модератор
Эксперт С++
6321 / 5905 / 1913
Регистрация: 18.12.2011
Сообщений: 15,181
Завершенные тесты: 1
28.05.2014, 19:19     Не работает сортировка по алфавиту #4
Копирую сюда пример
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
void insertSort(int* a, int size) 
{
    int i, j, tmp;
    for (i = 1; i < size; ++i) // цикл проходов, i - номер прохода
    {
        tmp = a[i];  // в tmp надо скопировать ВСЕ элементы структуры
        for (j = i - 1; j >= 0 && a[j] > tmp; --j) 
        {
            a[j + 1] = a[j];    // сдвигаем ВСЮ структуру направо, пока не дошли
        }
        a[j + 1] = tmp; // место найдено, вставить тоже ВСЮ ранее скопированную структуру    
    }
}
-Arabella-
0 / 0 / 0
Регистрация: 20.10.2013
Сообщений: 233
28.05.2014, 19:42  [ТС]     Не работает сортировка по алфавиту #5
zss, Я поправила по примеру, вы написали, скопировать все элементы структур в tmp, в примере tmp = st. у меня, теперь выводит теперь только 2 фамилии по несколько раз, но даже их не по алфавиту. Я правильно скопировала элементы структур?

C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
for(i=1;i<n;i++) 
{
strcpy(st.FIO,alp[i].FIO);
strcpy(st.FIO,alp[i].FIO);
st.at=alp[i].at;
st.time=alp[i].time;
st.ves=alp[i].ves;
st.shtuk=alp[i].shtuk;
for(j=i-1;j>=0 && strcmp(alp[j].FIO,st.FIO)>0;j--)
{
strcpy(alp[j+1].FIO,alp[j].FIO);
}
st.at=alp[j+1].at;
st.time=alp[j+1].time;
st.ves=alp[j+1].ves;
st.shtuk=alp[j+1].shtuk;
printf("\n %25s  |  %5.2f  |  %2d  |  %2d  |  %5.2f", st.FIO,st.time,st.ves,st.shtuk,st.at);
}
Kuzia domovenok
1890 / 1745 / 118
Регистрация: 25.03.2012
Сообщений: 5,924
Записей в блоге: 1
28.05.2014, 19:46     Не работает сортировка по алфавиту #6
Цитата Сообщение от -Arabella- Посмотреть сообщение
st.at=alp[j+1].at;
st.time=alp[j+1].time;
st.ves=alp[j+1].ves;
st.shtuk=alp[j+1].shtuk
какой смысл этих строк? может вместо этого надо именно сдвигать массив вправо, а не копировать одно и то же в st? (кстати, в случае с полем FIO ты именно так и сделал! strcpy(alp[j+1].FIO,alp[j].FIO) - верно, а дальше почему не...? )
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
for(i=1;i<n;i++)
{
  strcpy(st.FIO,alp[i].FIO);
  st.at=alp[i].at;
  st.time=alp[i].time;
  st.ves=alp[i].ves;
  st.shtuk=alp[i].shtuk;
  for(j=i-1;j>=0 && strcmp(alp[j].FIO,st.FIO)>0;j--)
  {
    strcpy(alp[j+1].FIO,alp[j].FIO);
    alp[j+1].at=alp[j].at;
    alp[j+1].time=alp[j].time;
    alp[j+1].ves=alp[j].ves;
    alp[j+1].shtuk=alp[j].shtuk;
  }
  strcpy(alp[j].FIO,st.FIO);
  alp[j].at=st.at;
  alp[j].time=st.time;
  alp[j].ves=st.ves;
  alp[j].shtuk=st.shtuk;
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.05.2014, 12:54     Не работает сортировка по алфавиту
Еще ссылки по теме:

Сортировка по алфавиту С++.очерёдность - C++
Понимаю тема обсуждалась и очень затёртая, но дайте совет. Подскажите,каким образом можно провести сортировку по алфавиту. Не важно...

Сортировка списка по алфавиту - C++
#include &lt;iostream&gt; #include &lt;string&gt; #include &lt;vector&gt; #include &lt;stdlib.h&gt; #include &lt;iomanip&gt; using namespace std; ...

Сортировка строк по алфавиту - C++
Дана строка символов, состоящая из произвольного текста на англий- ском языке, слова разделены пробелами. Вывести на экран слова этого...

Сортировка текста по алфавиту (ООП) - C++
Отсортировать в объектно ориентированном программировании. Сделать так, чтобы сначала сортировались буквы, а потом пробелы, запятые и т.д.


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
-Arabella-
0 / 0 / 0
Регистрация: 20.10.2013
Сообщений: 233
29.05.2014, 12:54  [ТС]     Не работает сортировка по алфавиту #7
Kuzia domovenok,
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
кстати, в случае с полем FIO ты именно так и сделал! strcpy(alp[j+1].FIO,alp[j].FIO)
Я только FIO сделала, потому что мне надо только фамилии отсортировать, и я подумала, этого достаточно будет

Я поправила, не работает, если строки 16-20 писать, как сейчас, то выводит опять две фамилии и пустые строки, если как вы написали,
C++ (Qt)
1
2
3
4
5
strcpy(alp[j].FIO,st.FIO);
  alp[j].at=st.at;
  alp[j].time=st.time;
  alp[j].ves=st.ves;
  alp[j].shtuk=st.shtuk;
то опять же в порядке ввода и без первого. В чем еще может быть ошибка?

C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
for(i=1;i<n;i++)
{
strcpy(st.FIO,alp[i].FIO);
st.at=alp[i].at;
st.time=alp[i].time;
st.ves=alp[i].ves;
st.shtuk=alp[i].shtuk;
for(j=i-1;j>=0 && strcmp(alp[j].FIO,st.FIO)>0;j--)
{
    strcpy(alp[j+1].FIO,alp[j].FIO);
    alp[j+1].at=alp[j].at;
    alp[j+1].time=alp[j].time;
    alp[j+1].ves=alp[j].ves;
    alp[j+1].shtuk=alp[j].shtuk;
}
strcpy(st.FIO,alp[j].FIO);
st.at=st.at;
st.time=alp[j].time;
st.ves=alp[j].ves;
st.shtuk=alp[j].shtuk;
printf("\n %25s  |  %5.2f  |  %2d  |  %2d  |  %5.2f", st.FIO,st.time,st.ves,st.shtuk,st.at);
}
Добавлено через 57 минут
А сравнение строк я правильно организовала?
C++
1
strcmp(alp[j].FIO,st.FIO)>0
При сравнении, например, alp[j].FIO=Ivanov и st.FIO=Petrov, функция strcmp<0 ?

Добавлено через 15 часов 52 минуты
Нашла ошибку, она была не в сортировке, а в выводе. Спасибо за помощь))
Yandex
Объявления
29.05.2014, 12:54     Не работает сортировка по алфавиту
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru