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

Сортировка не получается (отсортировать массив по возрастанию) - C++

Восстановить пароль Регистрация
 
enota
0 / 0 / 0
Регистрация: 03.03.2012
Сообщений: 36
29.04.2012, 15:26     Сортировка не получается (отсортировать массив по возрастанию) #1
Одномерный массив вводится с клавиатуры (сначала вводится количество элементов массива N, а затем вводятся сами элементы массива). Затем вводятся два числа X и Y (позиции, нумеруются начиная с 1) (X <= Y <= N). Необходимо отсортировать массив по возрастанию в промежутке от X до Y включительно. Вывести массив на экран в одну строку, разделяя элементы пробелами. Предусмотреть ситуацию, когда размер массива 0, и когда позиций X, Y не существует (вывести массив без изменений). Предусмотреть ситуацию, когда X > Y, - в этом случае необходимо поменять местами X и Y.
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
#include <iostream.h>
#include <stdlib.h>
#include <iomanip.h>
int i;
void main()
{
srand(time(NULL));
const n=7;
int a[n],x,y,tmp;
for (i=0;i<n;i++)
a[i]=rand()%201-100;
for (i=0;i<n;i++)
cin>>setw(4)>>a[i];
cout<<endl;
cout<<"Vvedite 2 chisla cherez probel: ";
cin>>x>>y;
for (i=x;i<y;i++)
{
if (a[i+1]<a[i])
{
tmp=a[i+1];
a[i+1]=a[i];
a[i]=tmp;
}}
for (i=0;i<n;i++)
cout<<setw(4)<<a[i]<<' ';
cin.get();
cin.get();
}
выводит неверный результат

Добавлено через 24 минуты
помогите,пожалуйста
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.04.2012, 15:26     Сортировка не получается (отсортировать массив по возрастанию)
Посмотрите здесь:

отсортировать массив по возрастанию C++
[C++] отсортировать массив по возрастанию и убыванию C++
Вычислить y= k14− 18 k для 6 значений k, вводимых с клавиатуры. Результат вычислений записать в массив. Полученный массив отсортировать по возрастанию C++
Отсортировать массив по возрастанию C++
C++ массив С отсортировать по возрастанию
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Kuzia domovenok
 Аватар для Kuzia domovenok
1882 / 1737 / 116
Регистрация: 25.03.2012
Сообщений: 5,907
Записей в блоге: 1
29.04.2012, 15:51     Сортировка не получается (отсортировать массив по возрастанию) #2
Цитата Сообщение от enota Посмотреть сообщение
for (i=x;i<y;i++)
{
if (a[i+1]<a[i])
А ничего, что для пузырька нужен двойной вложенный цикл? Посмотри внимательно хоть на этом, хоть на каком другом сайте реализацию пузырька.

Добавлено через 14 минут
C++
1
2
3
4
5
6
7
8
9
10
for (j=y; j>x; j--)
for (i=x;i<j;i++)
{
if (a[i+1]<a[i])
{
tmp=a[i+1];
a[i+1]=a[i];
a[i]=tmp;
}
}
enota
0 / 0 / 0
Регистрация: 03.03.2012
Сообщений: 36
29.04.2012, 15:57  [ТС]     Сортировка не получается (отсортировать массив по возрастанию) #3
не правильный ответ пишет:
выходные данные-7 3 2 1 0 4 5,а нужно 3 2 0 1 4 5 6,при входных 7
3
2
1
0
4
5
6
3
4
Kuzia domovenok
 Аватар для Kuzia domovenok
1882 / 1737 / 116
Регистрация: 25.03.2012
Сообщений: 5,907
Записей в блоге: 1
29.04.2012, 16:02     Сортировка не получается (отсортировать массив по возрастанию) #4
Цитата Сообщение от enota Посмотреть сообщение
не правильный ответ пишет:
выходные данные-7 3 2 1 0 4 5,а нужно 3 2 0 1 4 5 6,при входных 7
ты понятным языком можешь сказать, что не так? ты исправил ошибку, на которую я указал?
enota
0 / 0 / 0
Регистрация: 03.03.2012
Сообщений: 36
29.04.2012, 21:55  [ТС]     Сортировка не получается (отсортировать массив по возрастанию) #5
да,сделал вложенный цикл

Добавлено через 2 часа 26 минут
почему ожет быть неправильный ответ?

Добавлено через 18 секунд
почему может быть неправильный ответ?

Добавлено через 3 часа 24 минуты
помогите,прошу!!
gray_fox
What a waste!
 Аватар для gray_fox
1244 / 1127 / 53
Регистрация: 21.04.2012
Сообщений: 2,350
Завершенные тесты: 3
29.04.2012, 21:59     Сортировка не получается (отсортировать массив по возрастанию) #6
Цитата Сообщение от enota Посмотреть сообщение
да,сделал вложенный цикл
Добавлено через 2 часа 26 минут
почему ожет быть неправильный ответ?
Ну дык выкладывайте код, здесь вам не форум экстрасенсов.
enota
0 / 0 / 0
Регистрация: 03.03.2012
Сообщений: 36
29.04.2012, 22:03  [ТС]     Сортировка не получается (отсортировать массив по возрастанию) #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
25
26
27
28
29
30
31
#include <iostream.h>
#include <stdlib.h>
#include <iomanip.h>
int i;
void main()
{
srand(time(NULL));
const n=7;
int a[n],x,y,tmp;
for (i=0;i<n;i++)
a[i]=rand()%201-100;
for (i=0;i<n;i++)
cin>>setw(4)>>a[i];
cout<<endl;
cout<<"Vvedite 2 chisla cherez probel: ";
cin>>x>>y;
for (j=y; j>x; j--)
for (i=x;i<j;i++)
{
if (a[i+1]<a[i])
{
tmp=a[i+1];
a[i+1]=a[i];
a[i]=tmp;
}
}
for (i=0;i<n;i++)
cout<<setw(4)<<a[i]<<' ';
cin.get();
cin.get();
}
Добавлено через 49 секунд
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
#include <iostream.h>
#include <stdlib.h>
#include <iomanip.h>
int i;
void main()
{
srand(time(NULL));
const n=7;
int a[n],x,y,tmp;
for (i=0;i<n;i++)
a[i]=rand()%201-100;
for (i=0;i<n;i++)
cin>>setw(4)>>a[i];
cout<<endl;
cout<<"Vvedite 2 chisla cherez probel: ";
cin>>x>>y;
for (j=y; j>x; j--)
for (i=x;i<j;i++)
{
if (a[i+1]<a[i])
{
tmp=a[i+1];
a[i+1]=a[i];
a[i]=tmp;
}
}
for (i=0;i<n;i++)
cout<<setw(4)<<a[i]<<' ';
cin.get();
cin.get();
}
gray_fox
What a waste!
 Аватар для gray_fox
1244 / 1127 / 53
Регистрация: 21.04.2012
Сообщений: 2,350
Завершенные тесты: 3
29.04.2012, 22:24     Сортировка не получается (отсортировать массив по возрастанию) #8
Цитата Сообщение от enota Посмотреть сообщение
for (i=x;i<j;i++) { if (a[i+1]<a[i]) { tmp=a[i+1]; a[i+1]=a[i]; a[i]=tmp; } }
Не понял что вы тут делаете. Это сортировка? Тогда попробуйте так:
C++
1
2
3
4
5
6
7
8
9
for (int i = x - 1; i != y - 1; ++i) {
    for (int j = i + 1; j != y; ++j) {
        if (a[j] < a[i]) {
            int tmp = a[i];
            a[i] = a[j];
            a[j] = tmp;
        }
    }
}
Цитата Сообщение от enota Посмотреть сообщение
#include <iostream.h> #include <stdlib.h> #include <iomanip.h>
в С++ эти библиотеки подключают так:
C++
1
2
3
#include <iostream>
#include <cstdlib>
#include <iomanip>
И форматируйте код, очень сложно понять, что там у вас происходит.
Toshkarik
 Аватар для Toshkarik
1139 / 856 / 50
Регистрация: 03.08.2011
Сообщений: 2,381
Завершенные тесты: 1
29.04.2012, 23:12     Сортировка не получается (отсортировать массив по возрастанию) #9
Цитата Сообщение от gray_fox Посмотреть сообщение
for (int i = x - 1; i != y - 1; ++i) {
* * for (int j = i + 1; j != y; ++j) {
* * * * if (a[j] < a[i]) {
* * * * * * int tmp = a[i];
* * * * * * a[i] = a[j];
* * * * * * a[j] = tmp;
* * * * }
* * }
}
Что это такое?
gray_fox
What a waste!
 Аватар для gray_fox
1244 / 1127 / 53
Регистрация: 21.04.2012
Сообщений: 2,350
Завершенные тесты: 3
29.04.2012, 23:28     Сортировка не получается (отсортировать массив по возрастанию) #10
Цитата Сообщение от Toshkarik Посмотреть сообщение
Что это такое?
Сортировка, нет?
Toshkarik
 Аватар для Toshkarik
1139 / 856 / 50
Регистрация: 03.08.2011
Сообщений: 2,381
Завершенные тесты: 1
29.04.2012, 23:37     Сортировка не получается (отсортировать массив по возрастанию) #11
Нет.
C++
1
2
3
4
5
6
7
8
for ( int i = 0; i < size; i++ ) {
   for ( int j = 1; j < size; j++ )
      if ( arr[ j ] < arr[ j - 1 ] ) {
         temp = arr[ j ];
         arr[ j ] = arr[ j - 1 ];
         arr[ j - 1 ] = temp;
      }
}
Самая простая сортировка пузырьком без улучшений.

С небольшими улучшениями:
C++
1
2
3
4
5
6
7
8
9
10
11
12
bool flag = true;
for ( int i = 0, tmpSize = size; flag; i++, tmpSize-- ) {
   flag = false;
 
   for ( int j = 1; j < tmpSize; j++ )
      if ( arr[ j ] < arr[ j - 1 ])
         temp = arr[ j ];
         arr[ j ] = arr[ j - 1 ];
         arr[ j - 1 ] = temp;
         flag = true;
      }
}
gray_fox
What a waste!
 Аватар для gray_fox
1244 / 1127 / 53
Регистрация: 21.04.2012
Сообщений: 2,350
Завершенные тесты: 3
29.04.2012, 23:40     Сортировка не получается (отсортировать массив по возрастанию) #12
? ну ок)
Toshkarik
 Аватар для Toshkarik
1139 / 856 / 50
Регистрация: 03.08.2011
Сообщений: 2,381
Завершенные тесты: 1
29.04.2012, 23:47     Сортировка не получается (отсортировать массив по возрастанию) #13
В случае ТС:
C++
1
2
3
4
5
6
7
8
for ( int i = x; i <= y; i++ ) {
   for ( int j = x + 1; j <= y; j++ )
      if ( arr[ j ] < arr[ j - 1 ] ) {
         temp = arr[ j ];
         arr[ j ] = arr[ j - 1 ];
         arr[ j - 1 ] = temp;
      }
}
elka
1 / 1 / 0
Регистрация: 31.03.2012
Сообщений: 38
30.04.2012, 09:50     Сортировка не получается (отсортировать массив по возрастанию) #14
все равно пишет тот же самый неверный результат
Toshkarik
 Аватар для Toshkarik
1139 / 856 / 50
Регистрация: 03.08.2011
Сообщений: 2,381
Завершенные тесты: 1
30.04.2012, 11:29     Сортировка не получается (отсортировать массив по возрастанию) #15
Значит Вы неправильно вводите данные. Проверил, все работает.
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
int main( ) {
   srand( time( NULL ) );
   
   const int n = 10;
   int a[ n ], x, y, tmp, i;
   
   for ( i = 0; i < n; i++ )
      a[i] = rand( ) % 201 - 100;
   
   for ( i = 0; i < n; i++ )
      cin >> a[i];
   
   cout << endl;
   
   cout << "Vvedite 2 chisla cherez probel: ";
   cin >> x >> y;
   
   if ( x > y ) {
      tmp = x;
      x = y;
      y = tmp;
   }
   
   if ( x < 0 || y >= n ) {
      cout << "Oshibka. Vveden nevernii diapazon." << endl;
   } else {
      for ( int i = x; i <= y; i++ ) {
         for ( int j = x + 1; j <= y; j++ )
            if ( a[ j ] < a[ j - 1 ] ) {
               tmp = a[ j ];
               a[ j ] = a[ j - 1 ];
               a[ j - 1 ] = tmp;
            }
      }
   }
   
   for ( i = 0; i < n; i++ )
      cout << setw( 4 ) << a[i] << ' ';
   
   cin.get( );
   
   return 0;
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
01.05.2012, 09:29     Сортировка не получается (отсортировать массив по возрастанию)
Еще ссылки по теме:

C++ Отсортировать массив структур по возрастанию
Отсортировать массив по убыванию, затем добавить недостающий элемент и отсортировать массив по возрастанию C++
C++ Отсортировать каждый столбец матрицы по возрастанию, сортировка Шелла

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

Или воспользуйтесь поиском по форуму:
enota
0 / 0 / 0
Регистрация: 03.03.2012
Сообщений: 36
01.05.2012, 09:29  [ТС]     Сортировка не получается (отсортировать массив по возрастанию) #16
получается- 7 3 2 1 0 4 5 6 3 4, а нужно 3 2 0 1 4 5 6, при 7
3
2
1
0
4
5
6
3
4

Добавлено через 12 часов 51 минуту
вставила ваш код и никак опять
Yandex
Объявления
01.05.2012, 09:29     Сортировка не получается (отсортировать массив по возрастанию)
Ответ Создать тему
Опции темы

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