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

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

Войти
Регистрация
Восстановить пароль
 
КенТюРиК
11 / 11 / 1
Регистрация: 18.10.2012
Сообщений: 148
#1

Отсортировать два массива и сформировать третий, так же упорядоченный - C++

04.02.2013, 04:11. Просмотров 376. Ответов 2
Метки нет (Все метки)

Задания к лабораторной работе.
Выполните приведенные ниже задания.
1. Даны два целочисленных массива
2. Реализуйте алгоритмы сортировок данных массивов.
3. Сформировать третий массив на основе данных, который также упорядочен и представляет операцию с элементами исходных массивов:
• объединение (содержит числа, принадлежащие хотя бы одному из множеств);
• перечисление (числа, принадлежащие обоим множествам);
• разность (числа, принадлежащие первому множеству, но не второму);
• симметричную разность (объединение разностей множеств).
Диапазон массивов (400 - +600)
Методы сортировки
1)прямым выбором.
2)быстрая сортировка.

До этого мы решали задачки в вводом и выводом массивов и вот те на,с помощью друзей написал все кроме 2 последних пунктов,а также есть некое количество ошибок.
P.s В книгах ничего особо найти не смог.

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
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
#include <stdio.h>  
#include <conio.h>
#include <stdlib.h>
#include "stdafx.h"
 
 
void PryamoyVibor (int* a,int n)
{
     int i,j,k;
     for(i=0;i<n;i++)
     {
                     k=i;
                     for(j=i+1;j<n;j++)
                     if(a[j]<a[k])
                     k=j;
                     j=a[k];
                     a[k]=a[i];
                     a[i]=j;
     }
}
 
template<class T>
void quickSortR(T* b, long n) {
 
 
  long i = 0, j = n;       
  T temp, p;
 
  p = a[ n>>1 ];      
 
  
  do {
    while ( b[i] < p ) i++;
    while ( a[j] > p ) j--;
 
    if (i <= j) {
      temp = b[i]; b[i] = b[j]; b[j] = temp;
      i++; j--;
    }
  } while ( i<=j );
 
  
  if ( j > 0 ) quickSortR(a, j);
  if ( n > i ) quickSortR(a+i, n-i);
}
 
int main()
{const int n=20;
int a[n],b[n],c[40],d[40],i,j,k,q,w,r,count=1;
 
printf("Pervonachalnii Masiv a[%d]: \n",n);
for(i=0;i<n;i++)
{
                a[i]=0+rand() % 600;
                printf("d",a[i]);
                }
            printf("Pervonachalnii Masiv b[%d]: \n",n);
            for(i=0;i<n;i++)
            {
           b[i]=0+rand()%600;
               printf("d",b[i]);
               }
 
          
         PryamoyVibor (a,n);
          printf("\n \n Massiv a[%d],otsortirovannii PryamoyVibor: \n ",n);
             for(i=0;i<n;i++)  
               printf("d",a[i]);
               
     quickSortR (b,n);
    printf("\n \n Massiv b[%d],otsortirovannii metodom quickSortR: \n",n);
      for(i=0;i<n;i++)  
        printf(" %d ",b[i]);
   
        
      printf("%d",b[i]);
      
      for(i=0;q=0;i<n;i++)
          c[q++]=a[i];
      for(j=0;j<n;j++)
          c[q++]=b[j];
       
      quickSortR(c,q);
      int temp=c[0];
      for(i=1;i<q;i++)
      {
          if(c[i]!=temp)
          {
              for(j=i+1;j<q;j++)
                  if(c[i]=c[j])
                      c[j]=temp;
              count++;
          }
 
      }
      count=0;
      for(i=1;i<q;i++)
          if(c[i]!=c[0])
              c[++count]=c[i];
      printf("\n \n Peresechenie massivov a{%d] i b[%d] (%d elementov): \n",n,n,count+1);
      for(i=0;i<count;i++)
          printf("%d",c[i]));
 
      for(i=0;w=0;i<n;i++)
          if(a[i]=b[j])
              d[w++]=a[i];
      printf("Peresechenie massivov a{%d] i b[%d] (%d elementov): \n" n,n,w);
      for(i=0;i<w;i++)
          printf("%d",d[i]);
      getch();
      return 0;
}
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.02.2013, 04:11
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Отсортировать два массива и сформировать третий, так же упорядоченный (C++):

Даны два произвольных одномерных массива действительных чисел М1 и М2. Сформировать слиянием этих массивов упорядоченный массив М3 - C++
Помогите с работой на Borland C++ 5.02:Даны два произвольных одномерных массива действительных чисел М1 и М2. Сформировать слиянием этих...

Дано два одномерных массива, создать третий массив который содержит элементы первого массива - C++
Дано два одномерных массива, создать третий массив который содержит элементы первого массива, но без элементов второго массива. Заранее...

Объединить два упорядоченных по возрастанию массива в один, также упорядоченный массив - C++
Написать программу, которая объединяет два упорядоченных по возрастанию массива в один, также упорядоченный массив. Рекомендуемый вид...

Слить два упорядоченных массива в третий - C++
помогите чутка,надо слить два массива в один и упорядочить,создал два упорядоченых массива а как ввести их значения в 3ий не пойму#include...

Из простых элементов исходного неупорядоченного массива, состоящего из натуральных чисел, сформировать новый упорядоченный массив. - C++
Ребята нужна помощь!!! Задача такая, нужно разработать программу в процедурном, классовом или модульном виде. 1.Из простых элементов...

Два разных массива записать последовательно в третий - C++
Пожалуйста помогите! Ввод-два массива разной длинны.Записать в третий-сначала идут элементы первого затем второго массива. Зарание...

2
Sergey_B
163 / 163 / 14
Регистрация: 08.01.2013
Сообщений: 335
04.02.2013, 18:40 #2
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
Вот функция сортировки выбором:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
int Selection(int *mas, int n)
{
    for (int i=0; i<n-1; i++)
    {
        int min = i;
        for(int j = i + 1; j < n; j++)
        {
            if(mas[j] < mas[min])
            {
                min = j; 
            }    
        }
        if(min != i)
        {
               int temp = mas[i];
               mas[i]=mas[min];
               mas[min]=temp;
        }
    }
 
return *mas;      
}
Добавлено через 15 минут
функция быстрой сортировки массива:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
int qSort(int *mas,int low, int high)
{
    int i = low;                
      int j = high;
      int x = mas[(low+high)/2];  // x - îïîðГ*ûé ýëåìåГ*ГІ ïîñðåäèГ*ГҐ ìåæäó low ГЁ high
      do {
          while(mas[i] < x) i++;  // ïîèñê ýëåìåГ*ГІГ* äëÿ ïåðåГ*îñГ* Гў Г±ГІГ*ðøóþ Г·Г*Г±ГІГј
          while(mas[j] > x) j--;  // ïîèñê ýëåìåГ*ГІГ* äëÿ ïåðåГ*îñГ* Гў ìëГ*äøóþ Г·Г*Г±ГІГј
          if(i <= j){           
              // îáìåГ* ýëåìåГ*òîâ ìåñòГ*ìè:
              int temp = mas[i];
              mas[i] = mas[j];
              mas[j] = temp;
              // ïåðåõîä ГЄ ñëåäóþùèì ýëåìåГ*ГІГ*Г¬:
              i++; j--;
          }
      } while(i < j);
      if(low < j) qSort(mas, low, j);
      if(i < high) qSort(mas, i, high);
return *mas;      
}
Алгоритмы эти нашел на вики, там они даже реализованы, не понимаю, в чем у вас была загвоздка... Да и у вас в программе они реализованы
0
КенТюРиК
11 / 11 / 1
Регистрация: 18.10.2012
Сообщений: 148
05.02.2013, 00:42  [ТС] #3
Проблемы с 3 пунктом.

3. Сформировать третий массив на основе данных, который также упорядочен и представляет операцию с элементами исходных массивов:
• объединение (содержит числа, принадлежащие хотя бы одному из множеств);
• перечисление (числа, принадлежащие обоим множествам);
• разность (числа, принадлежащие первому множеству, но не второму);
• симметричную разность (объединение разностей множеств).
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.02.2013, 00:42
Привет! Вот еще темы с ответами:

Слить два массива в третий отсортированный по убыванию, без дублей - C++
Даны два массива. Массив А состоит из N элементов и отсортирован по возрастанию. Массив B состоит из M элементов и отсортирован по...

Даны два упорядоченных массива. Слить их в третий, но чтобы элементы не повторялись - C++
Даны два упорядоченных массива. Нужно слить их в третий, но чтобы элементы не повторялись. (один проход по массивам)

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

Построить упорядоченный по возрастанию третий массив слиянием двух заданных - C++
Задать два упорядоченных по возрастанию одномерных массивы. Построить упорядоченный по возрастанию третий массив слиянием двух заданных.


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

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

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