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

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

Восстановить пароль Регистрация
 
КенТюРиК
11 / 11 / 1
Регистрация: 18.10.2012
Сообщений: 148
04.02.2013, 04:11     Отсортировать два массива и сформировать третий, так же упорядоченный #1
Задания к лабораторной работе.
Выполните приведенные ниже задания.
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;
}
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.02.2013, 04:11     Отсортировать два массива и сформировать третий, так же упорядоченный
Посмотрите здесь:

C++ Два разных массива записать последовательно в третий
C++ Построить упорядоченный по возрастанию третий массив слиянием двух заданных
Даны два произвольных одномерных массива действительных чисел М1 и М2. Сформировать слиянием этих массивов упорядоченный массив М3 C++
C++ Из простых элементов исходного неупорядоченного массива, состоящего из натуральных чисел, сформировать новый упорядоченный массив.
C++ Слить два упорядоченных массива в третий
Даны два упорядоченных массива. Слить их в третий, но чтобы элементы не повторялись C++
Дано два одномерных массива, создать третий массив который содержит элементы первого массива C++
Объединить два упорядоченных по возрастанию массива в один, также упорядоченный массив C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
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;      
}
Алгоритмы эти нашел на вики, там они даже реализованы, не понимаю, в чем у вас была загвоздка... Да и у вас в программе они реализованы
КенТюРиК
11 / 11 / 1
Регистрация: 18.10.2012
Сообщений: 148
05.02.2013, 00:42  [ТС]     Отсортировать два массива и сформировать третий, так же упорядоченный #3
Проблемы с 3 пунктом.

3. Сформировать третий массив на основе данных, который также упорядочен и представляет операцию с элементами исходных массивов:
• объединение (содержит числа, принадлежащие хотя бы одному из множеств);
• перечисление (числа, принадлежащие обоим множествам);
• разность (числа, принадлежащие первому множеству, но не второму);
• симметричную разность (объединение разностей множеств).
Yandex
Объявления
05.02.2013, 00:42     Отсортировать два массива и сформировать третий, так же упорядоченный
Ответ Создать тему
Опции темы

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