Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

Войти
Регистрация
Восстановить пароль
 
barmagloteot
0 / 0 / 0
Регистрация: 14.11.2012
Сообщений: 29
#1

Сортировка пузырьком, в чем ошибка - C++

17.11.2012, 03:58. Просмотров 361. Ответов 4
Метки нет (Все метки)

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

Получил вот такой вариант:

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
int main ( )
{
  int m[25] = {-45,89,23,-67,12,97,0,45,-39,3,-11,78,-56,73,-80,92,-20,31,19,-44,55,39,-49,13,-2};
  // числа заполняются вручную по условию задания
  int i;
 
  for (i=0;i<=23;++i)
    {
        if (m[i]>m[i+1])
        {
            int temp=m[i];
            m[i]=m[i+1];
            m[i+1]=temp;
            i=0;
            }
    }
  
  int c;
  for (c=0; c<=24; ++c)
    cout<<m[c]<<endl;
 
 
  system("pause");
    return 0;
}
В итоге программа правильно сортирует все числа, кроме m[0], которое так и остается первым.
Далее я просмотрел описанные здесь, на сайте, методы сортировки. Код в примерах понял не до конца, но в принципе понятно с добавлением второго for, перед первым, программа начинает работать корректно.
Так что вопрос скорее по теории - почему в моем варианте результат некорректен. Никак понять не могу, хотя может позднее время сказывается.
Буду благодарен за любую помощь.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.11.2012, 03:58
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Сортировка пузырьком, в чем ошибка (C++):

Сортировка пузырьком ошибка - C++
Ошибка 8 error C2676: бинарный &quot;&lt;&quot;: &quot;detali&quot; не определяет этот оператор или преобразование к типу приемлемо к встроенному оператору ...

Не могу понять где ошибка. Сортировка пузырьком - C++
Суть такова. заполняю массив и он должен сортировать. но после компиляции сортировка происходит не правильно #include &lt;conio.h&gt; ...

Сортировка массива - в чем ошибка? - C++
Попытался написать код сортировки массива. Алгоритм такой: ищем самое маленькое число в массиве и помещаем в первый элемент массива, а...

Сортировка одномерного массива. В чем ошибка? - C++
Такая вот ошибка: ОС Windows инициировала точку останова в МояПрограмма.exe. Это может быть вызвано повреждением кучи и указывает на...

Сортировка одномерного массива выбором - в чем ошибка - C++
Всем привет. Пытаюсь написать алгоритм, который будет сортировать одномерный массив заданной длины: 1. находить минимум среди элементов, ...

В чем ошибка? Ссртировка выбором и сортировка вставкой - C++
108-ая строка. error C2372: a: переопределение; различные типы косвенного обращения 110-ая строка. error C2440: =: невозможно...

4
Croessmah
Ушел
13770 / 8020 / 924
Регистрация: 27.09.2012
Сообщений: 19,747
Записей в блоге: 3
Завершенные тесты: 1
17.11.2012, 04:13 #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
25
26
#include <iostream>
using std::cout;
using std::endl;
int main ( )
{
    const int size=25;
  int m[size] = {-45,89,23,-67,12,97,0,45,-39,3,-11,78,-56,73,-80,92,-20,31,19,-44,55,39,-49,13,-2};
  int i; 
  for (i=1;i<size;++i)
  {
      for(int j=1;j<size;j++){
        if (m[i]<m[i-1])
        {
            int temp=m[i];
            m[i]=m[i-1];
            m[i-1]=temp;
            i=0;
            }
      }
  }  
  int c;
  for (c=0; c<size; ++c)
    cout<<m[c]<<endl; 
  system("pause");
    return 0;
}

Цитата Сообщение от barmagloteot Посмотреть сообщение
// числа заполняются вручную по условию задания
может имелось ввиду
C++
1
2
for(int i=0;i<size;++i)
   cin>>m[i];
Не?
1
barmagloteot
0 / 0 / 0
Регистрация: 14.11.2012
Сообщений: 29
17.11.2012, 04:24  [ТС] #3
Цитата Сообщение от Croessmah Посмотреть сообщение
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
#include <iostream>
using std::cout;
using std::endl;
int main ( )
{
    const int size=25;
  int m[size] = {-45,89,23,-67,12,97,0,45,-39,3,-11,78,-56,73,-80,92,-20,31,19,-44,55,39,-49,13,-2};
  int i; 
  for (i=1;i<size;++i)
  {
      for(int j=1;j<size;j++){
        if (m[i]<m[i-1])
        {
            int temp=m[i];
            m[i]=m[i-1];
            m[i-1]=temp;
            i=0;
            }
      }
  }  
  int c;
  for (c=0; c<size; ++c)
    cout<<m[c]<<endl; 
  system("pause");
    return 0;
}
Ну да, я уже понял что второй for нужен, и тогда все работает. Только не понял почему так. Мой вариант сортирует все кроме первого числа, вот чего понять не могу.



Цитата Сообщение от Croessmah Посмотреть сообщение
может имелось ввиду
C++
1
2
for(int i=0;i<size;++i)
   cin>>m[i];
Не?
Нет, там задача именно научится реализовывать сортировку. Я же замахаюсь каждый раз при отладке 25 чисел вводить.
0
Croessmah
Ушел
13770 / 8020 / 924
Регистрация: 27.09.2012
Сообщений: 19,747
Записей в блоге: 3
Завершенные тесты: 1
17.11.2012, 04:35 #4
Цитата Сообщение от barmagloteot Посмотреть сообщение
Мой вариант сортирует все кроме первого числа, вот чего понять не могу.
C++
1
2
3
4
5
6
7
        if (m[i]<m[i-1])
        {
            int temp=m[i];
            m[i]=m[i-1];
            m[i-1]=temp;
            i=0;
            }
потому что Вы ставите i=0; а перед следующей итерацией i у Вас увеличивается на 1, т.к. в счетчике for стоит i++.
сделайте i=-1; и все
1
barmagloteot
0 / 0 / 0
Регистрация: 14.11.2012
Сообщений: 29
17.11.2012, 04:41  [ТС] #5
Точно. Теперь понял. Спасибо.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.11.2012, 04:41
Привет! Вот еще темы с ответами:

сортировка пузырьком - C++
#include &lt;cstdlib&gt; #include &lt;iostream&gt; #include &lt;ctime&gt; using namespace std; int main(int argc, char *argv) { ...

Сортировка пузырьком - C++
Привет всем! У меня по методу вопросов нет, успешно отсортировал от меньшего к большему, но вот от большего к меньшему - какая-то шляпа...

Сортировка пузырьком с++ - C++
Сортировка пузырьком, все работает, но помогите поменять ввод цифр в ручную на ввод цифр рандома (от -100 до +100). #include &lt;iostream&gt; ...

Сортировка пузырьком - C++
Нужно отсортировать два динамических массива методом пузырька. Не могу понять в чем ошибка, помогите пожалуйста. #include &quot;stdafx.h&quot; ...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

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