Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.91/11: Рейтинг темы: голосов - 11, средняя оценка - 4.91
0 / 0 / 0
Регистрация: 03.03.2012
Сообщений: 36
1

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

29.04.2012, 15:26. Показов 2089. Ответов 15
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Одномерный массив вводится с клавиатуры (сначала вводится количество элементов массива 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 минуты
помогите,пожалуйста
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
29.04.2012, 15:26
Ответы с готовыми решениями:

Отсортировать массив по убыванию, затем добавить недостающий элемент и отсортировать массив по возрастанию
2) В массиве a ...a встречаются по одному разу все целые числа от 0 до n, кроме одного. За n...

Отсортировать каждый столбец матрицы по возрастанию, сортировка Шелла
Помогите пожалуйста решить задачу. Есть матрица (nxn), нужно отсортировать каждый столбец, по...

Отсортировать четные столбцы матрицы по убыванию, нечетные по возрастанию (сортировка Шелла)
Богом прошу, помогите! Совершенно запутался. Необходимо: сортировкой Шелла с шагом d = N/2^i...

отсортировать массив по возрастанию
#include &lt;iostream.h&gt; #include &lt;stdlib.h&gt; #include &lt;stdio.h&gt; #define N 10 БУДУ ПРЕМНОГО...

15
4064 / 3318 / 924
Регистрация: 25.03.2012
Сообщений: 12,493
Записей в блоге: 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;
}
}
0
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
0
4064 / 3318 / 924
Регистрация: 25.03.2012
Сообщений: 12,493
Записей в блоге: 1
29.04.2012, 16:02 4
Цитата Сообщение от enota Посмотреть сообщение
не правильный ответ пишет:
выходные данные-7 3 2 1 0 4 5,а нужно 3 2 0 1 4 5 6,при входных 7
ты понятным языком можешь сказать, что не так? ты исправил ошибку, на которую я указал?
0
0 / 0 / 0
Регистрация: 03.03.2012
Сообщений: 36
29.04.2012, 21:55  [ТС] 5
да,сделал вложенный цикл

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

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

Добавлено через 3 часа 24 минуты
помогите,прошу!!
0
What a waste!
1608 / 1300 / 180
Регистрация: 21.04.2012
Сообщений: 2,729
29.04.2012, 21:59 6
Цитата Сообщение от enota Посмотреть сообщение
да,сделал вложенный цикл
Добавлено через 2 часа 26 минут
почему ожет быть неправильный ответ?
Ну дык выкладывайте код, здесь вам не форум экстрасенсов.
0
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();
}
0
What a waste!
1608 / 1300 / 180
Регистрация: 21.04.2012
Сообщений: 2,729
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>
И форматируйте код, очень сложно понять, что там у вас происходит.
0
1181 / 894 / 94
Регистрация: 03.08.2011
Сообщений: 2,461
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;
* * * * }
* * }
}
Что это такое?
0
What a waste!
1608 / 1300 / 180
Регистрация: 21.04.2012
Сообщений: 2,729
29.04.2012, 23:28 10
Цитата Сообщение от Toshkarik Посмотреть сообщение
Что это такое?
Сортировка, нет?
0
1181 / 894 / 94
Регистрация: 03.08.2011
Сообщений: 2,461
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;
      }
}
1
What a waste!
1608 / 1300 / 180
Регистрация: 21.04.2012
Сообщений: 2,729
29.04.2012, 23:40 12
? ну ок)
0
1181 / 894 / 94
Регистрация: 03.08.2011
Сообщений: 2,461
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;
      }
}
0
1 / 1 / 0
Регистрация: 31.03.2012
Сообщений: 38
30.04.2012, 09:50 14
все равно пишет тот же самый неверный результат
0
1181 / 894 / 94
Регистрация: 03.08.2011
Сообщений: 2,461
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;
}
0
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 минуту
вставила ваш код и никак опять
0
01.05.2012, 09:29
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
01.05.2012, 09:29
Помогаю со студенческими работами здесь

Отсортировать массив по возрастанию
Отсортировать массив по возрастанию методом поиска минимального элемента.

Отсортировать массив по возрастанию
Помогите пожалуйста написать программку! Заполнение динамического целочисленного массива длинной...

Отсортировать массив по возрастанию
Задан массив из 10 элементов, отсортировать его по возрастанию. Помогите, пожалуйста !!!

Отсортировать массив по возрастанию
подскажите пожалуйста #include &lt;iostream&gt; #include &lt;iomanip&gt; #include &lt;ctime&gt; using namespace...


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

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru