Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/9: Рейтинг темы: голосов - 9, средняя оценка - 4.67
0 / 0 / 0
Регистрация: 31.05.2010
Сообщений: 12

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

18.05.2012, 23:50. Показов 1875. Ответов 1
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый вечер. C си начал совсем недавно работать, до этого был паскаль, делфи. Есть рабочий код на паскале, прошу помочь разобраться в чем ошибка, в переделанном мною коде под си.
Код Паскаль:
Pascal
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
program SortSlian;
uses crt;
type mas=array[1..1000] of integer;
procedure Sliv(var a:mas;p,q : integer);                
{процедура сливающая массивы, p-начало, q-конец}            
var r,i,j,k : integer;
    b:mas;
begin
 r:=(p+q) div 2;{делим массив}                       
 i:=p;{начало левой половины}                        
 j:=r+1;{начало правой половины}                    
 for k:=p to q do{смотрим от начала до конца}             
 if (i<=r) and ((j>q) or (a[i]<a[j])) then              
 {переставляем элементы из половин в новый массив, упорядочивая пары}
  begin
   b[k]:=a[i];
   i:=i+1;
  end
 else
  begin
   b[k]:=a[j];
   j:=j+1;
  end ;
 for k:=p to q do
 a[k]:=b[k];
end;
{рекурсивная процедура сортировки, проверяет если осталось
больше одного элемента, повторяет слияние в левой или правой частях массива}
procedure Sort(var a:mas;p,q : integer); {p,q - индексы начала и конца сортируемой части массива}
begin
 if p<q then {массив из одного элемента тривиально упорядочен}
 begin
  Sort(a,p,(p+q) div 2);{сортируем левую половину}
  Sort(a,(p+q) div 2 + 1,q);{правую половину}
  Sliv(a,p,q);{сливаем две половины}
 end;
end;
var a:mas;
    n,i:integer;
begin
 clrscr;
 randomize;
 write('Размер массива n=');
 readln(n); {Определение размера массива A - N) и его заполнение}
 writeln('Исходный массив:');
 for i:=1 to n do
  begin
   a[i]:=random(50);
   write(a[i],' ');
  end;
 writeln;
 writeln;
 {запуск сортирующей процедуры, сортируем от первого до последнего элемента}
 Sort(a,1,N);
 {Вывод отсортированного массива A}
 writeln('Результат сортировки:');
 for i:=1 to n do
 write(a[i],' ');
 readln
end.
Код на СИ:
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
// Lab01.cpp : Defines the entry point for the console application.
//
 
#include "stdafx.h"
#include <iostream>
 
 int Sliv(int A[1000], int nach, int kon) 
 {
     int r,i,j,k;
     int B[1000];
     r=(nach+kon)/2;
     i=nach;
     j=r+1;
     for(k=nach;k<=kon;k++)
     if (i<=r) if ((j>kon) || (A[i]<A[j]))
     {
         B[k]=A[i];
         i++;
     }
     else 
     {
         B[k]=A[j];
         j++;
     }
 for (k=nach;i<=kon;i++) 
     A[k]=B[k];
 return 0;
 }
int Sort(int A[1000], int nach, int kon)
{
 if (nach<kon)
{ 
  Sort(A,nach,(nach+kon)/2);
  Sort(A,(nach+kon)/2 + 1,kon);
  Sliv(A,nach,kon);
 }
return 0;
}
int main() {
int kol,i;
int vec[100];
std::cout<< "\n Vvedite kolichestvo elementov: ";
std::cin>>kol;
std::cout<< "\n Vvedite massiv: ";
for(i=0;i<=kol-1;i++)
std::cin>>vec[i];
Sort(vec,0,kol-1);
for(i=0;i<=kol-1;i++)
std::cout<<vec[i];
return 0;
}
Сортировка работает неправильно.

Добавлено через 2 часа 57 минут
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
18.05.2012, 23:50
Ответы с готовыми решениями:

Сортировка слиянием. В каком куске кода происходит сортировка и каким именно образом?
Помогите, пожалуйста, разобраться. Подскажите в каком куске кода происходит сортировка и каким именно образом? #include &lt;iostream&gt; ...

Сортировка Слиянием vs Быстрая Сортировка - что лучше
Народ, помогите разобраться какой из методов сортировки лучше &quot;Сортировка Слиянием&quot; или &quot;Быстрая Сортировка&quot;: у быстрой...

2 сортировки: пирамидальная сортировка и сортировка слиянием
Реализовать два улучшенных алгоритма сортировки. Для каждого алгоритма вычислить показатель качества сортировки (количество операций, т.е....

1
Эксперт С++
 Аватар для valeriikozlov
4728 / 2549 / 757
Регистрация: 18.08.2009
Сообщений: 4,568
19.05.2012, 01:02
Цитата Сообщение от shishkin Посмотреть сообщение
Сортировка работает неправильно.
если хотите именно тот вариант:
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
#include "stdafx.h"
#include <iostream>
#include <algorithm>
 
 int Sliv(int A[1000], int nach, int kon) 
 {
     int r,i,j,k;
     int B[1000];
     r=(nach+kon)/2;
     i=nach;
     j=r;
     for(k=nach;k<=kon;k++)
     if ((i<=r) && ((j>kon) || (A[i]<A[j])))
     {
         B[k]=A[i];
         i++;
     }
     else 
     {
         B[k]=A[j];
         j++;
     }
 for (k=nach;k<=kon;k++) 
     A[k]=B[k];
 return 0;
 }
int Sort(int A[1000], int nach, int kon)
{
 if (nach<kon)
{ 
     std::sort(A, A+(nach+kon)/2);
     std::sort(A+(nach+kon)/2, A+kon+1);
  Sliv(A,nach,kon);
 }
return 0;
}
int main() {
int kol,i;
int vec[100];
std::cout<< "\n Vvedite kolichestvo elementov: ";
std::cin>>kol;
std::cout<< "\n Vvedite massiv: ";
for(i=0;i<=kol-1;i++)
std::cin>>vec[i];
Sort(vec,0,kol-1);
for(i=0;i<=kol-1;i++)
std::cout<<vec[i];
return 0;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
19.05.2012, 01:02
Помогаю со студенческими работами здесь

Шейкерная сортировка + сортировка слиянием
вот часть когда,которая выполняет шейкерную сортировку : для символьного и целочисленого массива . // ConsoleApplication15.cpp:...

Сортировка слиянием
Даны два текстовых файла f1.txt и f2.txt, состоящие из целых чисел, которые упорядочены по неубыванию. Числа лежат в диапозоне от 0 до 9....

Сортировка слиянием
Требуется отсортировать слиянием массив структур. По одному из элемерту структуры. Вторая ночь без сна, не могу понять даже реализацию...

Сортировка слиянием С++
Помогите пжлст написать программу со слиянием. Например вводим массивы A=1 2 3 и B= 4 5 6 и получить результат 1 2 3 4 5 6

Сортировка слиянием
Всем доброго время суток, дана задача: Требуется упорядочить элементы некоторого массива целых чисел, который следует упорядочить по...


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

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Новые блоги и статьи
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
Влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru