Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Demiar
2 / 2 / 0
Регистрация: 02.11.2012
Сообщений: 86
#1

Задача на сортировку массивов - C++

18.11.2013, 17:09. Просмотров 434. Ответов 5
Метки нет (Все метки)

Сформировать с помощью датчика случайных чисел в диапазоне [0,20] два массива C и D, из 20 элементов целого типа каждый. Вывести их на экран. Отсортировать массивы C и D по возрастанию и сформировать из них массив E, таким образом, чтобы он также был отсортирован.

Суть такова, что я понял как сортировать 2 массива - сравнивать C[i] и D[j] и тот, который меньше, заносить в E[k], но не могу сообразить что делать когда они равны, попытался сделать условие меньше, либо равно и присваивать E[k] - меньший элемент, а к E[k+1] элемент равный ему, но чот неправильно видимо ( заранее спасибо

Вот мой код :

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
61
62
63
64
#include <stdlib.h>
#include <stdio.h>
int const N=20;
int random (int N) { return rand()%N; }
main()
{  
  int i,j,k,a=0,b=20,C[N],D[N],E[2*N],temp;
  int p=0;
  printf("Массив C\n");
  for ( i = 0;i<N;i++)
     {
           C[i]=random ( b - a + 1 ) + a;
           printf("%d\n",C[i]);
     }
   printf("Массив D\n");  
     for ( i = 0;i<N;i++)
     {
           D[i]=random ( b - a + 1 ) + a;
           printf("%d\n",D[i]);
     }  
 
  for ( i = 0; i < N-1; i ++ ) 
    for ( j = N-2; j >= i; j -- ){
      if (C[j]>C[j+1]) 
      {
        temp = C[j]; 
        C[j] = C[j+1]; 
        C[j+1] = temp;
      }
      
        if (D[j]>D[j+1])
      {
        temp = D[j]; 
        D[j] = D[j+1]; 
        D[j+1] = temp;
      }
      }
     printf("\n Отсортированный массив C:\n");
  for ( i = 0; i < N; i ++ )
     printf("%d  ", C[i]);
     
     printf("\n Отсортированный массив D:\n");
  for ( i = 0; i < N; i ++ )
     printf("%d  ", D[i]);
     
     
     for ( i=0,j=0,k=0;k<N*2;k++)
        {
          if(C[i]<=D[j]) {
                          E[k] = C[i];
                          E[k+1] = D[j];
                          k=k+2;
                          i++;
                          }
        {
          if(C[i]>D[j]) {
                         E[k] = D[j];
                         j++;
                         }                                         
        }
        }
        printf("\n Отсортированный массив E:\n");
        for( k = 0; k<2*N;k++ )
           printf("%d\n",E[k]);
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.11.2013, 17:09
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Задача на сортировку массивов (C++):

Сортировку вставками меняем на Пирамидальную сортировку и на Сортировку подсчётом - C++
Здравствуйте. Я не как не могу разобраться.Помогите. У меня есть листинг сортировки вставками: #include &quot;stdafx.h&quot; #include...

Задача на сортировку - C++
Не понимаю в чем дело( Прошу помочь с кодом) #include &lt;iostream&gt; using namespace std; int random (int A) { int mas,i; ...

Задача на сортировку - C++
Друзья, нужна помощь с кодом) Выводит полную чушь( Условие задачи: есть одноименный массив длиной 40. Отсортировать методом выбора...

Задача на функции и сортировку - C++
Есть список людей лежащий в файле, надо упорядочить список в алфавитном порядке ФИО ветеранов войны, остальных в списке оставить на своих...

Задача на сортировку строк - C++
Задача: в 10 строковых переменных занесите 5 рандомных символов, а потом сортируйте их в порядке возрастания. Помогите советом,...

Задача на сортировку массива - C++
Всем доброго времени суток. Есть задача - Отсортировать по возрастанию только четные элементы массива, или я устал, или тупо не могу...

5
programina
1914 / 599 / 37
Регистрация: 23.10.2011
Сообщений: 4,468
Записей в блоге: 2
18.11.2013, 17:14 #2
Цитата Сообщение от Demiar Посмотреть сообщение
но не могу сообразить что делать когда они равны
и думать не надо, если они равны, то без разницы какой первее попадет в массив Е.
0
Demiar
2 / 2 / 0
Регистрация: 02.11.2012
Сообщений: 86
18.11.2013, 17:43  [ТС] #3
это то понятно, но что не так в проге? помогите)

Добавлено через 3 минуты
вернее что исправить?
0
W0lfdalE
7 / 7 / 0
Регистрация: 03.07.2013
Сообщений: 26
18.11.2013, 17:48 #4
C++
1
2
3
4
5
6
7
8
9
10
if(i < N && C[i] < D[j])
{
    E[k] = C[i];
    i++;
}
else
{
    E[k] = D[j];
    j++;
}
0
Demiar
2 / 2 / 0
Регистрация: 02.11.2012
Сообщений: 86
18.11.2013, 18:02  [ТС] #5
не пашет, в конце почему-то выводит 2 элемента 0 и 5

Добавлено через 18 секунд
так ведь ?

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
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
#include <stdlib.h>
#include <stdio.h>
int const N=20;
int random (int N) { return rand()%N; }
main()
{  
  int i,j,k,a=0,b=20,C[N],D[N],E[2*N],temp;
  int p=0;
  printf("ГЊГ*Г±Г±ГЁГў C\n");
  for ( i = 0;i<N;i++)
     {
           C[i]=random ( b - a + 1 ) + a;
           printf("%d\n",C[i]);
     }
   printf("ГЊГ*Г±Г±ГЁГў D\n");  
     for ( i = 0;i<N;i++)
     {
           D[i]=random ( b - a + 1 ) + a;
           printf("%d\n",D[i]);
     }  
 
  for ( i = 0; i < N-1; i ++ ) 
    for ( j = N-2; j >= i; j -- ){
      if (C[j]>C[j+1]) 
      {
        temp = C[j]; 
        C[j] = C[j+1]; 
        C[j+1] = temp;
      }
      
        if (D[j]>D[j+1])
      {
        temp = D[j]; 
        D[j] = D[j+1]; 
        D[j+1] = temp;
      }
      }
     printf("\n ÎòñîðòèðîâГ*Г*Г*ûé Г¬Г*Г±Г±ГЁГў C:\n");
  for ( i = 0; i < N; i ++ )
     printf("%d  ", C[i]);
     
     printf("\n ÎòñîðòèðîâГ*Г*Г*ûé Г¬Г*Г±Г±ГЁГў D:\n");
  for ( i = 0; i < N; i ++ )
     printf("%d  ", D[i]);
     
     
     for ( i=0,j=0,k=0;k<N*2;k++)
        {
         
 
        
        
        if(i < N && C[i] < D[j])
{
    E[k] = C[i];
    i++;
}
else
{
    E[k] = D[j];
    j++;
}
        
        
}    
        
        
        
        printf("\n ÎòñîðòèðîâГ*Г*Г*ûé Г¬Г*Г±Г±ГЁГў E:\n");
        for( k = 0; k<2*N;k++ )
           printf("%d\n",E[k]);
                
 
 
 
       
 
 
      
          
      
  system("PAUSE");
  return 0;
}
0
W0lfdalE
7 / 7 / 0
Регистрация: 03.07.2013
Сообщений: 26
18.11.2013, 18:08 #6
Попробуйте поменять < на <= в условии.
0
18.11.2013, 18:08
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.11.2013, 18:08
Привет! Вот еще темы с ответами:

Задача на сортировку массива методом вставки на С++ - C++
Помогите, пожалуйста, решить задачу. Отсортируйте по возрастанию методом вставки одномерный целочисленный массив, введенный с клавиатуры....

Задача про сортировку с использованием связного списка, нужно найти ошибку - C++
Имеется файл состоящий из данных о студентах(ФИО, номер группы, средний бал). Построить сортированный список(по имени хотя бы) по любому из...

Задача на сортировку массива по возрастанию методом выбора минимального элемента. Не правильно работает код - C++
Моя задача отсортировать массив методом выбора минимального элемента. Он заключается в следующем. Ищем в массиве минимальный элемент и...

Подскажите как эту сортировку переделать в сортировку по алфавиту? - C++
Подскажите как эту сортировку переделать в сортировку по алфавиту?? vector&lt;std::pair&lt;string, int&gt;&gt; popularAuthor; ...


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

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

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