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

Ошибка сортировки пузырьком - C++

Восстановить пароль Регистрация
 
[WRG]
 Аватар для [WRG]
50 / 50 / 9
Регистрация: 20.11.2011
Сообщений: 243
Записей в блоге: 1
12.04.2012, 18:36     Ошибка сортировки пузырьком #1
Программа заполняет массив из 10 элементов рандомными числами от 1 до 100, выводит исходный массив, потом сортирует его методом пузырька и снова выводит.
проблема в том что заполняет и выводит массив программа как надо, а вот дольше дело не идет, либо она вобще не меняет элементы местами, либо меняет только одну пару.
грешу на выход индекса массива из диапазона, но сколько не смотрел, вроде все правильно.
помогите разобраться в проблеме)

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
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
#include <iostream>
#include <time.h>
#include <cstdlib>
using namespace std;
 
void fill_array(int ranmax, int size_of_arr);
void output_array(int size_of_arr);
void sort_array(int size_of_arr);
 
int array[10];   //массив на 10 элементов
 
int main()
{
    setlocale(LC_ALL,"Russian");
    //int i,j,temp;
    fill_array(100, 10);
    cout << "Исходный массив:\n";
    output_array(10);
    sort_array(10);
    cout << "Отсортированный массив:\n";
    output_array(10);
    return 0;
}
 
void fill_array(int ranmax, int size_of_arr)
{
    srand(time(NULL));
    for(int i=0; i < size_of_arr; i++)
      {
          array[i] = 1 + rand() % ranmax;
      }
}
 
void output_array(int size_of_arr)
{
    for(int i=0; i < size_of_arr; i++)
      {
          cout << array[i] << ' ';
      }
    cout  << '\n';
}
 
void sort_array(int size_of_arr)
{
    int i,j,temp;
    for (i = 0; i < size_of_arr-1; i++)
    {
      for (j = 0; j < size_of_arr-1; i++)
      {
        if (array[j+1]<array[j])
          {
              cout << "Обмен\n";
              temp = array[j+1];
              array[j+1] = array[j];
              array[j] = temp;
          }
      }
    }
 
}
да я использую Codeblocs + GCC
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
valeriikozlov
Эксперт C++
 Аватар для valeriikozlov
4660 / 2486 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
12.04.2012, 19:09     Ошибка сортировки пузырьком #2
см комментарии:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
void sort_array(int size_of_arr)
{
    int i,j,temp;
    for (i = 0; i < size_of_arr-1; i++)
    {
      for (j = 0; j < size_of_arr-1; i++)// i++ заменить на ... (наверное сами уже догадались)
      {
        if (array[j+1]<array[j])
          {
              cout << "Обмен\n";
              temp = array[j+1];
              array[j+1] = array[j];
              array[j] = temp;
          }
      }
    }
 
}
[WRG]
 Аватар для [WRG]
50 / 50 / 9
Регистрация: 20.11.2011
Сообщений: 243
Записей в блоге: 1
12.04.2012, 19:20  [ТС]     Ошибка сортировки пузырьком #3
вы имеете в виду вот это
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
void sort_array(int size_of_arr)
{
    int i,j,temp;
    for (i = 0; i < size_of_arr-1; i++)
    {
      for (j = size_of_arr; j >=; i--)// i++ заменить на ... (наверное сами уже догадались)
      {
        if (array[j-1]<array[j])
          {
              cout << "Обмен\n";
              temp = array[j-1];
              array[j-1] = array[j];
              array[j] = temp;
          }
      }
    }
 
}
поменял так же плюсы на минусы в сомом обмене элементов. не работает все равно.
valeriikozlov
Эксперт C++
 Аватар для valeriikozlov
4660 / 2486 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
12.04.2012, 19:24     Ошибка сортировки пузырьком #4
Ладно давайте так:
вот это:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
void sort_array(int size_of_arr)
{
    int i,j,temp;
    for (i = 0; i < size_of_arr-1; i++)
    {
      for (j = 0; j < size_of_arr-1; i++)
      {
        if (array[j+1]<array[j])
          {
              cout << "Обмен\n";
              temp = array[j+1];
              array[j+1] = array[j];
              array[j] = temp;
          }
      }
    }
 
}
меняйте на это:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
void sort_array(int size_of_arr)
{
    int i,j,temp;
    for (i = 0; i < size_of_arr-1; i++)
    {
      for (j = 0; j < size_of_arr-1; j++)
      {
        if (array[j+1]<array[j])
          {
              cout << "Обмен\n";
              temp = array[j+1];
              array[j+1] = array[j];
              array[j] = temp;
          }
      }
    }
 
}
и все заработает.

Добавлено через 52 секунды

Не по теме:

видимо не сами код писали

[WRG]
 Аватар для [WRG]
50 / 50 / 9
Регистрация: 20.11.2011
Сообщений: 243
Записей в блоге: 1
12.04.2012, 19:30  [ТС]     Ошибка сортировки пузырьком #5
ааааа черт благодарствую)
код писал как раз сам) просто второй день с++ изучаю) надо привыкнуть вместо j использовать другую переменную, а то i и j почти не отличимы. шрифт в редакторе поменять
еще раз спасибо
Yandex
Объявления
12.04.2012, 19:30     Ошибка сортировки пузырьком
Ответ Создать тему
Опции темы

Текущее время: 15:18. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru