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

Сортировка пузырьком - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.67
sanchoflat
4 / 6 / 1
Регистрация: 05.11.2011
Сообщений: 97
07.10.2012, 20:28     Сортировка пузырьком #1
Не понимаю, в чем проблема при сортировке пузырьком.
сортирую структуру:
C++
1
2
3
4
5
6
7
8
9
10
11
12
for (int i=0; i<4; i++) 
            {
        for (int j=n-1; j>i; j--)
        {
            if (strcmp(stran[j].naim, stran[j-1].naim)<0)
            {
                t = stran[j];
                stran[j] = stran[j-1];
                stran[j-1] = t;
            }
        }
        }
вроде сортирует, но результат далеко не тот что нужен
подскажите что не так
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.10.2012, 20:28     Сортировка пузырьком
Посмотрите здесь:

Сортировка пузырьком. C++
C++ Сортировка пузырьком
C++ Сортировка пузырьком
C++ Сортировка пузырьком
C++ Сортировка пузырьком
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
DU
1477 / 1053 / 45
Регистрация: 05.12.2011
Сообщений: 2,279
07.10.2012, 20:51     Сортировка пузырьком #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
27
28
29
30
31
32
33
34
35
36
37
38
39
40
#include <iostream>
 
void printArray(int* arr, unsigned size)
{
  for (unsigned i = 0; i < size; ++i)
  {
    std::cout << arr[i] << "  ";
  }
  std::cout << std::endl;
}
 
int main()
{
 
  int arr[10];
  const unsigned arrSize = sizeof(arr) / sizeof(*arr);
  for (int i = 0; i < arrSize; ++i)
  {
    arr[i] = arrSize - i;
  }
 
  printArray(arr, arrSize);
 
  for (int i = 0; i < arrSize - 1; ++i)
  {
    for (int j = i + 1; j < arrSize; ++j)
    {
      if (arr[j] < arr[i])
      {
        const int tmp = arr[i];
        arr[i] = arr[j];
        arr[j] = tmp;
      }
    }
  }
 
  printArray(arr, arrSize);
 
  return 0;
}
panicwassano
590 / 558 / 20
Регистрация: 07.11.2010
Сообщений: 2,004
07.10.2012, 20:54     Сортировка пузырьком #3
Цитата Сообщение от sanchoflat Посмотреть сообщение
вроде сортирует, но результат далеко не тот что нужен
подскажите что не так
что такое n?
sanchoflat
4 / 6 / 1
Регистрация: 05.11.2011
Сообщений: 97
07.10.2012, 21:04  [ТС]     Сортировка пузырьком #4
n - количество записей в файле. пробовал n менять на число. 4 записи в каждом массиве. уже разные варианты пузырька пробовал, но никак.
такой тест:
исходный массив: Russia France Italy Austria
отсортированный: France Italy Russia Austria

Добавлено через 1 минуту
panicwassano,
с вашим вариантом такой же результат
panicwassano
590 / 558 / 20
Регистрация: 07.11.2010
Сообщений: 2,004
07.10.2012, 21:23     Сортировка пузырьком #5
весь код давайте сюда
sanchoflat
4 / 6 / 1
Регистрация: 05.11.2011
Сообщений: 97
07.10.2012, 21:28  [ТС]     Сортировка пузырьком #6
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
struct tovar 
{
    char strani[max_dlina];
    char naim[max_dlina];
    int kolvo;
    char vvod;
};
.....
fscanf(pfile,"%s%s%d%d", &stran[i].strani,&stran[i].naim,&stran[i].kolvo); //считываю значения
 
...
switch(choise)
    {
    case 1:
        {
            for (int i=0; i<n-1; ++i) 
            {
        for (int j=i+1; j<n; ++j)
        {
            if (strcmp(stran[j].naim, stran[j-1].naim)<0)
            {
                t = stran[j];
                stran[j] = stran[j-1];
                stran[j-1] = t;
            }
        }
        }
            vivod(stran,n);
            break;
        }
    
    case 2:
        {
            for (int i=0; i<n-1; ++i) 
            {
        for (int j=i+1; j<n; ++j)
        {
            if (stran[j].kolvo>stran[j-1].kolvo)
            {
                t = stran[j];
                stran[j] = stran[j-1];
                stran[j-1] = t;
            }
        }
            }
            vivod(stran,n);
            break;
        }
        
        
        
        case 3:
        exit(0);
    }
    
}
Добавлено через 1 минуту
а вот поле с kolvo вообще не сортирует
David Sylva
 Аватар для David Sylva
1280 / 942 / 51
Регистрация: 17.05.2012
Сообщений: 2,686
07.10.2012, 21:28     Сортировка пузырьком #7
Мне кажется неправильно передаёшь в цикле имена надо через strcpy. Например так

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>  
 
int main() 
{ 
    char str [4][20] = { "Russia", "France", "Italy", "Austria" }; 
    int i, j; 
 
    for ( i = 0; i < 4 - 1; i++) 
        for ( j = 0; j < 4 - 1; j++) 
        { 
            if(strcmp(str[j], str[j+1]) > 0) 
            { 
                char temp[20]; 
                strcpy(temp, str[j]); 
                strcpy(str[j], str[j+1]); 
                strcpy(str[j+1], temp); 
            } 
        } 
 
        for ( i = 0; i < 4; i++) 
            std::cout << str[i] << " "; 
        std::cout << std::endl;
}
sanchoflat
4 / 6 / 1
Регистрация: 05.11.2011
Сообщений: 97
07.10.2012, 21:44  [ТС]     Сортировка пузырьком #8
David Sylva,
спасибо большое - сортирует на ура. смотрел просто похожую работу, там без strcpy и вроде все работает.


Добавлено через 4 минуты
проблема в том, что в моем варианте если я меняю страны, то я меняю и наименование и количество, если же ваш вариант, то я просто меняю значения.
David Sylva
 Аватар для David Sylva
1280 / 942 / 51
Регистрация: 17.05.2012
Сообщений: 2,686
07.10.2012, 21:52     Сортировка пузырьком #9
передавай числовые значения в соответсвии с тем как сортируешь имена стран. Опиши всё задание.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.10.2012, 22:11     Сортировка пузырьком
Еще ссылки по теме:

Сортировка Пузырьком :) C++
C++ Сортировка пузырьком
C++ Сортировка пузырьком

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

Или воспользуйтесь поиском по форуму:
sanchoflat
4 / 6 / 1
Регистрация: 05.11.2011
Сообщений: 97
07.10.2012, 22:11  [ТС]     Сортировка пузырьком #10
задание - создать структуры с 3 полями - 1 числовое и 2 символьных. и отсортировать по двум из них по выбору.

вобщем немного попробовав - сортирует по количеству, но выводит в обратном порядке - но это исправим.
но при такой же сортировки для поля со странами - выдает немного не то.

Добавлено через 14 минут
всем спасибо, вопрос закрыт) видимо от того что целый день делаю - уже совсем запутался - сортировал по одному полю, а смотрел на другое))
Yandex
Объявления
07.10.2012, 22:11     Сортировка пузырьком
Ответ Создать тему
Опции темы

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