Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.67/15: Рейтинг темы: голосов - 15, средняя оценка - 4.67
xexew
0 / 0 / 2
Регистрация: 22.02.2011
Сообщений: 76
1

сортировка пузырьком

11.09.2011, 22:59. Просмотров 2624. Ответов 23
Метки нет (Все метки)

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <iostream>
using namespace std;
void main()
{
const n=4;
int a[n],i,j,buffer;
for(i=0;i<n;i++)
cin>>a[i];
 
for (i=0; i<n-1; i++) 
    for (j=i; j>=0; j--) 
        if (a[j] > a[j+1]) 
        {
         buffer=a[i];
         a[i]=a[j];
         a[j]=buffer;
        }
for(i=0;i<n;i++)
cout<<"a["<<i<<"]="<<a[i]<<endl;
 
 
 
}
входные данные: 5 3 10 2
исходные: 3 5 10 2
будьте добры, подскажите как сделать что бы он еще один круг сортировал
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.09.2011, 22:59
Ответы с готовыми решениями:

Сортировка пузырьком
Как сделать пошаговый вывод сортировки? #include &lt;iostream&gt; #include...

Сортировка пузырьком
Привет всем. Проверьте программу, пожалуйста. #include &lt;stdio.h&gt; #include...

Сортировка пузырьком
Здравствуйте! Решаю задачу:пользователь вводит слова через пробел,я должен...

Сортировка пузырьком
вот написала программу но не работает :( #include &lt;iostream&gt; #include...

Сортировка пузырьком
#include &quot;stdafx.h&quot; #include &lt;iostream&gt; using namespace std; int main()...

23
Dani
1393 / 637 / 134
Регистрация: 11.08.2011
Сообщений: 2,299
Записей в блоге: 2
Завершенные тесты: 1
11.09.2011, 23:07 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
#include <iostream>
 
using namespace std;
int main()
{
const int n=4;
int a[n],i,j,buffer;
for(i=0;i<n;i++)
cin>>a[i];
 
for (i=0; i<n-1; i++) 
    for (j=i; j<n; j++) 
        if (a[j] < a[j+1]) 
                {
                 buffer=a[i];
                 a[i]=a[j];
                 a[j]=buffer;
                }
for(i=0;i<n;i++)
cout<<"a["<<i<<"]="<<a[i]<<endl;
system ("pause"); 
 
 
}
1
xexew
0 / 0 / 2
Регистрация: 22.02.2011
Сообщений: 76
11.09.2011, 23:13  [ТС] 3
все равно не правильно работает
0
Rexer
165 / 164 / 46
Регистрация: 10.10.2010
Сообщений: 725
11.09.2011, 23:16 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
26
27
28
#include<stdio.h>
#define N 1000
int
main()
{
   int n, i;
   int a[N];
   scanf("%d", &n);
   for(i = 0 ; i < n; i++)
   {
       scanf("%d", &a[i]);
   }
   for(i = 0 ; i < n-1 ; i++)
   {
      for(j = i + 1 ; j < n ; j++)
      {
          if(a[i] > a[j])
          {
             int tmp = a[i]; a[i] = a[j] ; a[j] = tmp;
          }
       }
   }
   for(i = 0 ; i < n; i++)
   {
       printf("%d ", a[i]);
   }
   return 0;
}
Можно впринципе еще и циклы просто от 0 до n сделать.
0
Dani
1393 / 637 / 134
Регистрация: 11.08.2011
Сообщений: 2,299
Записей в блоге: 2
Завершенные тесты: 1
11.09.2011, 23:16 5
у меня все правильно, что у Вас не так?
0
Dani
1393 / 637 / 134
Регистрация: 11.08.2011
Сообщений: 2,299
Записей в блоге: 2
Завершенные тесты: 1
11.09.2011, 23:18 6
Вот скрин
0
Миниатюры
сортировка пузырьком  
Dani
1393 / 637 / 134
Регистрация: 11.08.2011
Сообщений: 2,299
Записей в блоге: 2
Завершенные тесты: 1
11.09.2011, 23:19 7
понял, проблема в другом
0
soon
2546 / 1311 / 177
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
11.09.2011, 23:20 8
C++
1
2
3
4
5
6
7
for (i=0; i<n-1; i++) 
    for (j=i; j<n; j++) 
        if (a[j] < a[j+1]) 
        {
            buffer=a[i];
            a[i]=a[j];
            a[j]=buffer;
Вот тут случаем не будет выхода за границы массива?
0
xexew
0 / 0 / 2
Регистрация: 22.02.2011
Сообщений: 76
11.09.2011, 23:21  [ТС] 9
допустим вводим данные: 33 13 20 14 22 5 10 1 2 3
выводит: 2 1 5 10 14 22 33 20 13 3
0
Dani
1393 / 637 / 134
Регистрация: 11.08.2011
Сообщений: 2,299
Записей в блоге: 2
Завершенные тесты: 1
11.09.2011, 23:23 10
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <iostream>
#include <algorithm>
using namespace std;
int main()
{
const int n=4;
int a[n],i,j,buffer;
for(i=0;i<n;i++)
cin>>a[i];
 
for (i=0; i<=n; i++) 
    for (j=0; j<n-i; j++) 
        if (a[j] > a[j+1]) swap (a[j],a[j+1]);
for(i=0;i<n;i++)
cout<<"a["<<i<<"]="<<a[i]<<endl;
system ("pause"); 
 
 
}
0
RUSya82
237 / 115 / 14
Регистрация: 15.10.2010
Сообщений: 395
11.09.2011, 23:31 11
"Алгоритм состоит в повторяющихся проходах по сортируемому массиву. За каждый проход элементы последовательно сравниваются попарно и, если порядок в паре неверный, выполняется обмен элементов. Проходы по массиву повторяются до тех пор, пока на очередном проходе не окажется, что обмены больше не нужны, что означает — массив отсортирован." - это из Википедии.
Обратите внимание на последнее предложение. В зависимости от степени упорядоченности исходного массива может потребоваться разное количество проходов по нему. Так где контроль того, упорядочен ли массив?
0
xexew
0 / 0 / 2
Регистрация: 22.02.2011
Сообщений: 76
11.09.2011, 23:34  [ТС] 12
warning C4508: 'main' : function should return a value; 'void' return type assumed
warning C4101: 'buffer' : unreferenced local variable

первое решается добавлением return 0;
а второе?
0
Dani
1393 / 637 / 134
Регистрация: 11.08.2011
Сообщений: 2,299
Записей в блоге: 2
Завершенные тесты: 1
11.09.2011, 23:36 13
у меня все идет, что у Вас за компилятор? и попробуйте убрать buffer, за него действует swap
0
soon
2546 / 1311 / 177
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
11.09.2011, 23:39 14
unreferenced
Не используемая.
Учите английский. Ну или Гугл транслейт вам в помощь.
0
xexew
0 / 0 / 2
Регистрация: 22.02.2011
Сообщений: 76
11.09.2011, 23:42  [ТС] 15
ms visual 6.0 c++
ms vs 2005

оба с ошибкой работают
0
Миниатюры
сортировка пузырьком  
Dani
1393 / 637 / 134
Регистрация: 11.08.2011
Сообщений: 2,299
Записей в блоге: 2
Завершенные тесты: 1
11.09.2011, 23:44 16
хм...

Добавлено через 1 минуту
у меня опять же все правильно! (Даже смешно уже как-то )
0
Dani
1393 / 637 / 134
Регистрация: 11.08.2011
Сообщений: 2,299
Записей в блоге: 2
Завершенные тесты: 1
11.09.2011, 23:45 17
Вот доказательство
0
Миниатюры
сортировка пузырьком  
soon
2546 / 1311 / 177
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
11.09.2011, 23:53 18
C++
1
2
3
4
for (i=0; i<=n; i++) 
    for (j=0; j<n-i; j++) 
        if (a[j] > a[j+1]) 
            swap (a[j],a[j+1]);
Выход за границы массива. При i = 0, j в последней итерации будет равно n - 0, и в блоке if выход при j +1.
И совсем необязательно брать i до n включительно. Все равно второй цикл при i = n не запустится.

Добавлено через 1 минуту
Поправка - j будет равен n - 0 - 1(т.к. n не включительно. Но сути не меняет)
0
Dani
1393 / 637 / 134
Регистрация: 11.08.2011
Сообщений: 2,299
Записей в блоге: 2
Завершенные тесты: 1
11.09.2011, 23:53 19
у меня на двух копиляторах, два разных результата показывает
0
soon
2546 / 1311 / 177
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
11.09.2011, 23:58 20
у меня на двух копиляторах, два разных результата показывает
Это очевидно. Никто не знает точно, какие данные будут за границей массива.
0
11.09.2011, 23:58
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.09.2011, 23:58

Сортировка Пузырьком
Здравствуйте! Пытался выполнить задание: Сортировка Пузырьком - один из...

сортировка пузырьком
#include &lt;cstdlib&gt; #include &lt;iostream&gt; #include &lt;ctime&gt; using namespace...

Сортировка пузырьком
#include &lt;iostream&gt; #include &lt;iomanip&gt; #include &lt;ctime&gt; using namespace std;...


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

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

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