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

Сортировка слиянием - C++

Восстановить пароль Регистрация
 
Songe
0 / 0 / 0
Регистрация: 23.12.2011
Сообщений: 7
07.01.2013, 18:56     Сортировка слиянием #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
int a[10000];
void merge(int,int,int);
void merge_sort(int low,int high)
{
 int mid;
 if(low<high)
 {
  mid=(low+high)/2;
  merge_sort(low,mid);
  merge_sort(mid+1,high);
  merge(low,mid,high);
 }
}
void merge(int low,int mid,int high)
{
 int h,i,j,b[10000],k;
 h=low;
 i=low;
 j=mid+1;
 
 while((h<=mid)&&(j<=high))
 {
  if(a[h]<=a[j])
  {
   b[i]=a[h];
   h++;
  }
  else
  {
   b[i]=a[j];
   j++;
  }
  i++;
 }
 if(h>mid)
 {
  for(k=j;k<=high;k++)
  {
   b[i]=a[k];
   i++;
  }
 }
 else
 {
  for(k=h;k<=mid;k++)
  {
   b[i]=a[k];
   i++;
  }
 }
 for(k=low;k<=high;k++) a[k]=b[k];
}
Возник вопрос, что делает код и для чего он нужен?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
 if(h>mid)
 {
  for(k=j;k<=high;k++)
  {
   b[i]=a[k];
   i++;
  }
 }
 else
 {
  for(k=h;k<=mid;k++)
  {
   b[i]=a[k];
   i++;
  }
 }
 for(k=low;k<=high;k++) a[k]=b[k];
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.01.2013, 18:56     Сортировка слиянием
Посмотрите здесь:

C++ Сортировка слиянием
C++ Сортировка слиянием
C++ Сортировка слиянием
Сортировка слиянием C++
C++ сортировка слиянием
C++ Сортировка слиянием
C++ Сортировка слиянием
Сортировка слиянием C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
valeriikozlov
Эксперт C++
 Аватар для valeriikozlov
4660 / 2486 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
08.01.2013, 07:39     Сортировка слиянием #2
Цитата Сообщение от Songe Посмотреть сообщение
Возник вопрос, что делает код и для чего он нужен?
при слиянии двух отсортированных наборов элементов (первый набор от h до mid, второй набор от mid+1 до high) в какой-то момент получится что один набор уже кончится, а второй еще нет. Например такие наборы:
1 2 3
7 8 9
Сначало первый набор весь войдет в массив b[]. А во втором еще остались элементы. Вот на этот случай и нужна эта часть:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
 if(h>mid)
 {
  for(k=j;k<=high;k++)
  {
   b[i]=a[k];
   i++;
  }
 }
 else
 {
  for(k=h;k<=mid;k++)
  {
   b[i]=a[k];
   i++;
  }
 }
А вот эта часть:
C++
1
 for(k=low;k<=high;k++) a[k]=b[k];
думаю Вам и так понятна.
Yandex
Объявления
08.01.2013, 07:39     Сортировка слиянием
Ответ Создать тему
Опции темы

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