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

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

Войти
Регистрация
Восстановить пароль
 
takhvatulin
10 / 10 / 0
Регистрация: 04.04.2014
Сообщений: 140
#1

Сортируются все элементы, кроме первого - C++

11.07.2014, 13:43. Просмотров 310. Ответов 18
Метки нет (Все метки)

Всем привет!
Пишу сортировку, но где то закралась ошибка:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
int A[5];   
A[0] = 6;
A[1] = 7;
A[2] = 3;
A[3] = 10;
A[4] = 5;
int q;
for(int i = 0; i < 5; i++)
{
    if(A[i] > A[i+1])
    {
        q = A[i];
        A[i] = A[i+1];
        A[i+1] = q;
        i = 0;
    }
}
первый элемент остается "6", остальное сортируется нормально
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.07.2014, 13:43     Сортируются все элементы, кроме первого
Посмотрите здесь:

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

Почему сортируются цифры в линейном списке, а фамилии не сортируются - C++
Когда я сортирую список из цифр,он сортируется,а когда нужно вывести список книг по алфавиту ,то не сортируется? struct element { ...

Массив: Удалить в заданном массиве действительных чисел «лишние» (кроме первого) элементы - C++
Удалить в заданном массиве действительных чисел «лишние» (кроме первого) элементы так, чтобы оставшиеся образовывали возрастающую...

Удалить из числа все повторяющиеся цифры кроме первого вхождения. Ошибка в коде - C++
Удалить из числа все повторяющиеся цифры кроме первого вхождения. Например: на входе: 112, на выходе: 12. В моем случаи: на входе:...

Обработка строки: удалить из числа все повторяющиеся цифры кроме первого вхождения - C++
С клавиатуры вводим произвольное число. От программы требуется удалить из этого числа все повторяющиеся цифры кроме первого вхождения. И...

Обработка строки: удалить из числа все повторяющиеся цифры кроме первого вхождения - C++
С клавиатуры вводим произвольное число. От программы требуется удалить из этого числа все повторяющиеся цифры кроме первого вхождения. И...

Все слова (кроме первого и последнего), длиннее К символов, заменить последовательностью из заданного символа - C++
#include &lt;iostream&gt; using namespace std; #define N 40 void func() { cout &lt;&lt; &quot;Замена содержимого всех слов длиннее K символов на...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ilot
Модератор
Эксперт С++
1789 / 1164 / 226
Регистрация: 16.05.2013
Сообщений: 3,060
Записей в блоге: 5
Завершенные тесты: 1
11.07.2014, 13:47     Сортируются все элементы, кроме первого #2
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
int A[5];
A[0] = 6;
A[1] = 7;
A[2] = 3;
A[3] = 10;
A[4] = 5;
int q;
 
for(int j = 0; j < 4; ++j)
{
    for(int i = 0; i < 4 - j; ++i)
        if(A[i] > A[i+1])
        {
            q = A[i];
            A[i] = A[i+1];
            A[i+1] = q;
            i = 0;
        }
}
castaway
Эксперт С++
4881 / 3017 / 370
Регистрация: 10.11.2010
Сообщений: 11,076
Записей в блоге: 10
Завершенные тесты: 1
11.07.2014, 13:47     Сортируются все элементы, кроме первого #3
Если i = 4, тогда на что ссылается A[i + 1] ?
takhvatulin
10 / 10 / 0
Регистрация: 04.04.2014
Сообщений: 140
11.07.2014, 13:48  [ТС]     Сортируются все элементы, кроме первого #4
Цитата Сообщение от castaway Посмотреть сообщение
Если i = 4, тогда на что ссылается A[i + 1] ?
Это я только что подправил, но это не имеет отношения к проблеме с первым элементом
pesenka1
1 / 1 / 2
Регистрация: 10.07.2014
Сообщений: 14
11.07.2014, 13:49     Сортируются все элементы, кроме первого #5
http://ru.wikibooks.org/wiki/%D0%A0%...BA%D0%BE%D0%BC
takhvatulin
10 / 10 / 0
Регистрация: 04.04.2014
Сообщений: 140
11.07.2014, 13:50  [ТС]     Сортируются все элементы, кроме первого #6
pesenka1, не надо мне статей, я сам хочу понять логику и написать. Я написал код, он должен работать, судя по моей логике, но почему то первый элемент не сортируется, видимо из за какой то невнимательной ошибке, которую я в упор не вижу(
Supernatural
287 / 143 / 28
Регистрация: 22.11.2010
Сообщений: 1,495
11.07.2014, 13:53     Сортируются все элементы, кроме первого #7
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
void main()
{
int A[5];
A[0] = 6;
A[1] = 7;
A[2] = 3;
A[3] = 10;
A[4] = 5;
int q;
for(int i = 0; i < 5; i++)
    for(int j = 0; j < 5 - i - 1; j++)
{
    if(A[i] > A[i+1])
    {
        q = A[i];
        A[i] = A[i+1];
        A[i+1] = q;
        i = 0;
    }
}
for(int i = 0; i < 5; i++)
cout<<A[i]<<" ";
system("pause");
}
takhvatulin
10 / 10 / 0
Регистрация: 04.04.2014
Сообщений: 140
11.07.2014, 13:54  [ТС]     Сортируются все элементы, кроме первого #8
Supernatural, а в чем моя ошибка заключается?
Supernatural
287 / 143 / 28
Регистрация: 22.11.2010
Сообщений: 1,495
11.07.2014, 13:57     Сортируются все элементы, кроме первого #9
Цитата Сообщение от takhvatulin Посмотреть сообщение
а в чем моя ошибка заключается?
добавил внутренний цикл, этот метод пузырька вроде
он описан на википедии
takhvatulin
10 / 10 / 0
Регистрация: 04.04.2014
Сообщений: 140
11.07.2014, 13:59  [ТС]     Сортируются все элементы, кроме первого #10
Supernatural, да елки палки, не интересует меня другой метод, конкретно в моем методе в чем ошибка?
P.S. если б хотел тупо сортировать, а не научится сортировать, взял бы готовый код и не парился.
castaway
Эксперт С++
4881 / 3017 / 370
Регистрация: 10.11.2010
Сообщений: 11,076
Записей в блоге: 10
Завершенные тесты: 1
11.07.2014, 14:01     Сортируются все элементы, кроме первого #11
А что ты там подправил ты покажешь?
takhvatulin
10 / 10 / 0
Регистрация: 04.04.2014
Сообщений: 140
11.07.2014, 14:04  [ТС]     Сортируются все элементы, кроме первого #12
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
int A[5];   
A[0] = 6;
A[1] = 7;
A[2] = 3;
A[3] = 10;
A[4] = 1;
int q;
for(int i = 0; i < 4; i++)
{
    if(A[i] > A[i+1])
    {
        q = A[i];
        A[i] = A[i+1];
        A[i+1] = q;
        i = 0;
    }
}
последний вариант мой такой
Supernatural
287 / 143 / 28
Регистрация: 22.11.2010
Сообщений: 1,495
11.07.2014, 14:06     Сортируются все элементы, кроме первого #13
случай такой, при каждом проходе цикла количество участвующих элементов при обмене уменьшается, у тебя только один цикл, то бишь только один раз будет обмен.
takhvatulin
10 / 10 / 0
Регистрация: 04.04.2014
Сообщений: 140
11.07.2014, 14:13  [ТС]     Сортируются все элементы, кроме первого #14
Цитата Сообщение от Supernatural Посмотреть сообщение
один раз будет обмен.
при каждом обмене я обнуляю счетчик:
C++
1
i = 0;
После этого я заново с нулевого элемента начинаю проверять, если снова встречается случай когда нужно сделать обмен, я обмениваю элементы и снова обнуляю "i"

Добавлено через 36 секунд
но почему то сравнение нулевого и первого элемента игнорится...

Добавлено через 48 секунд
Цитата Сообщение от Supernatural Посмотреть сообщение
один раз будет обмен.
если бы обмен у меня был один раз, то единица с последнего места не переместилась бы на второе

Добавлено через 3 минуты
Сделал вот так:
C++
1
2
3
4
5
6
int A[5];   
A[0] = 11;
A[1] = 7;
A[2] = 3;
A[3] = 10;
A[4] = 1;
теперь на первом месте 7, на последнем 11....
castaway
Эксперт С++
4881 / 3017 / 370
Регистрация: 10.11.2010
Сообщений: 11,076
Записей в блоге: 10
Завершенные тесты: 1
11.07.2014, 14:13     Сортируются все элементы, кроме первого #15
Не вижу проблемы. Покажи весь код с выводом и т.п.
takhvatulin
10 / 10 / 0
Регистрация: 04.04.2014
Сообщений: 140
11.07.2014, 14:16  [ТС]     Сортируются все элементы, кроме первого #16
Цитата Сообщение от castaway Посмотреть сообщение
Покажи весь код с выводом
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
void CCOM_TestDlg::OnBnClickedButton17()
{
    // TODO: Add your control notification handler code here
int A[5];   
A[0] = 11;
A[1] = 7;
A[2] = 3;
A[3] = 10;
A[4] = 1;
int q;
for(int i = 0; i < 4; i++)
{
    if(A[i] > A[i+1])
    {
        q = A[i];
        A[i] = A[i+1];
        A[i+1] = q;
        i = 0;
    }
}
for(int w = 0; w !=5; w++)
{
    TCHAR str[5];
    _swprintf(str, _T("%d"), A[w]);
    MessageBox(str);}
}
Добавлено через 1 минуту
Щас тупо цикл сортировка еще скопипастил, и все заработало!
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
int A[5];   
A[0] = 11;
A[1] = 7;
A[2] = 3;
A[3] = 10;
A[4] = 1;
int q;
for(int i = 0; i < 4; i++)
{
    if(A[i] > A[i+1])
    {
        q = A[i];
        A[i] = A[i+1];
        A[i+1] = q;
        i = 0;
    }
}
for(int i = 0; i < 4; i++)
{
    if(A[i] > A[i+1])
    {
        q = A[i];
        A[i] = A[i+1];
        A[i+1] = q;
        i = 0;
    }
}
for(int w = 0; w !=5; w++)
{
    TCHAR str[5];
    _swprintf(str, _T("%d"), A[w]);
    MessageBox(str);}
}
Теперь интересно, почему ему первого цикла не хватало, и понадобился точно такой же второй?
Voivoid
673 / 276 / 12
Регистрация: 31.03.2013
Сообщений: 1,339
11.07.2014, 14:20     Сортируются все элементы, кроме первого #17
Научись отладчиком пользоваться.

В данном случае происходит следующие:
После того, как у тебя выполнилось i = 0;
начинается новая итерация цикла и происходит инкремент i, т.е. i будет равен не 0, а 1
takhvatulin
10 / 10 / 0
Регистрация: 04.04.2014
Сообщений: 140
11.07.2014, 14:23  [ТС]     Сортируются все элементы, кроме первого #18
Voivoid, Дада, только что доперло до меня

Добавлено через 2 минуты
В общем сделал дополнительную проверку условия в цикле после обнуления, все заработало:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
int A[5];   
A[0] = 11;
A[1] = 7;
A[2] = 3;
A[3] = 10;
A[4] = 1;
int q;
for(int i = 0; i < 4; i++)
{
    if(A[i] > A[i+1])
    {
        q = A[i];
        A[i] = A[i+1];
        A[i+1] = q;
        i = 0;
        if(A[i] > A[i+1])
        {
            q = A[i];
            A[i] = A[i+1];
            A[i+1] = q;
            i = 0;
        }
    }
}
И не надо ее сравнивать с нормальными сортировками - это моя первая сортировка написанная мною)
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.07.2014, 15:17     Сортируются все элементы, кроме первого
Еще ссылки по теме:

Удалить из массива "лишние" (кроме первого) элементы - C++
#include &quot;stdafx.h&quot; #include&lt;conio.h&gt; #include&lt;stdio.h&gt; #include&lt;iostream&gt; #include&lt;iomanip&gt; using namespace std; /*...

Включить в новый массив все элементы исходного массива, кроме 3 - C++
Дан массив А = {12, 3, 45, 3, 8, 9, 3}. Создать новый массив, включив в него все элементы массива A, кроме 3 Привет! Не могу решить...

все элементы в массиве, кроме 1, нужно заменить суммой предыдущих элементов - C++
Ребят очень нужна помощь имеется задача суть такова : все элементы в массиве, кроме 1, нужно заменить суммой предыдущих элементов,...

Необходимо повернуть все элементы матрицы, кроме диагональных, против часовой стрелки на 90 градусов - C++
Здравствуйте! Необходимо повернуть все элементы матрицы, кроме диагональных, против часовой стрелки на 90 градусов. Например: Было: ...

Разделить все элементы массива на значение первого элемента - C++
№1. Дан массив из n элементов. Все его элементы разделить на первый элемент. №2. Дан массив из n элементов. Напечатать все...


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

Или воспользуйтесь поиском по форуму:
castaway
Эксперт С++
4881 / 3017 / 370
Регистрация: 10.11.2010
Сообщений: 11,076
Записей в блоге: 10
Завершенные тесты: 1
11.07.2014, 15:17     Сортируются все элементы, кроме первого #19
А если в цикле убрать i++ и дописать в конец условия:
C++
1
2
...
} else i++;
Yandex
Объявления
11.07.2014, 15:17     Сортируются все элементы, кроме первого
Ответ Создать тему
Опции темы

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