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

Шейкерная сортировка + сортировка слиянием

22.10.2012, 22:42. Показов 4641. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
вот часть когда,которая выполняет шейкерную сортировку : для символьного и целочисленого массива .
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
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
// ConsoleApplication15.cpp: определяет точку входа для консольного приложения.
//
 
#include "stdafx.h"
#include<iostream>
#include<conio.h>
 
#pragma hdrstop
using namespace std;
 
// функция сравнения:
bool compare_less(int Left, int Right)
{
    if (Left<Right)
        return true;
    else
        return false;   
}
 
 
void Swap(int Arr[], int i) //Поменять местами i-й и i-1-й элементы массива Arr
{
    int temp;       //буфер
    temp = Arr[i];
    Arr[i] = Arr[i-1];
    Arr[i-1] = temp;
}
void Swap(char Arr[], int i) // перестановка для  символьного массива
 
{
    int temp;       //буфер
    temp = Arr[i];
    Arr[i] = Arr[i-1];
    Arr[i-1] = temp;
}
 
void ShakerSort(int Arr[], int Start, int N)
{
    int Left,Right; //границы сортировки
    int Last;       //место последней перестановки
 
    Left=Start;
    Right = N-1;
    Last = N-1;
 
    do
    {
        //Сдвигаем к концу массива "легкие элементы"
        for (int i =Right; i >= Left; i--)
        {
            if (Arr[i-1]>Arr[i])
            {
                Swap(Arr, i);
                Last = i; //Запомнить место последней перестановки
            }
        }
 
        Left = Last + 1;
 
        //Сдвигаем к началу массива "тяжелые элементы"
        for (int i =Left; i <= Right; i++)
        {
            if (Arr[i-1]>Arr[i])
            {
                Swap(Arr, i);
                Last = i; //Запомнить место последней перестановки
            }
        }
 
        Right = Last - 1;
    }
    while (compare_less( Left, Right));
}
 
void ShakerSort(char Arr[], int Start, int N) // сортировка символьного массива
 
{
    int Left,Right; //границы сортировки
    int Last;       //место последней перестановки
 
    Left=Start;
    Right = N-1;
    Last = N-1;
 
    do
    {
        //Сдвигаем к концу массива "легкие элементы"
        for (int i =Right; i >= Left; i--)
        {
            if (Arr[i-1]>Arr[i])
            {
                Swap(Arr, i);
                Last = i; //Запомнить место последней перестановки
            }
        }
 
        Left = Last + 1;
 
        //Сдвигаем к началу массива "тяжелые элементы"
        for (int i =Left; i <= Right; i++)
        {
            if (Arr[i-1]>Arr[i])
            {
                Swap(Arr, i);
                Last = i; //Запомнить место последней перестановки
            }
        }
 
        Right = Last - 1;
    }
    while (compare_less( Left, Right));
} 
 
 
void ArrayOutput(int* Arr, int Start, int N) //Вывод элементов массива на консоль
{
    for (int i = 0; i < N; i++)
    {
        cout << Arr[i] << " ";
    }
    
}
void ArrayOutput(char* Arr, int Start, int N) //Вывод элементов символьного массива на консоль
{
    for (int i = 0; i < N; i++)
    {
        cout << Arr[i] << " ";
    }
    
}
 
 
 
int main(int argc, TCHAR* argv[])
{
    const int Count = 10;
    int TestArr[Count] = {9,8,7,6,5,4,3,2,1,0};
 
    int TestArr_2[Count] = {-9,-8,-7,16,15,-4,-3,20,12,11};
    
    const int Count_C=11;
    char TestArr_C[Count_C] = {"baecfdighl"};
 
    ShakerSort(TestArr,0,Count);
    ShakerSort(TestArr_C,0,Count_C);
 
 
    ArrayOutput(TestArr,0,Count);
    cout<<'\n';
    ArrayOutput(TestArr_C,0,Count_C);
    cout<<'\n';
 
    return 0;
}
Помогите написать функцию ,для сортировки слиянием для двух массивов.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
22.10.2012, 22:42
Ответы с готовыми решениями:

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

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

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

3
1779 / 757 / 153
Регистрация: 03.06.2009
Сообщений: 5,940
23.10.2012, 09:42
В гугле забанили?
Сортировка слиянием С++
http://algolist.manual.ru/sort/merge_sort.php
0
3 / 3 / 0
Регистрация: 30.03.2011
Сообщений: 61
23.10.2012, 12:58  [ТС]
Цитата Сообщение от alexcoder Посмотреть сообщение
1 ссылка программа там выполнена,записью в результирующий массив двух предыдущих и после сортируеться.

Я же прошу к выше написанной программе ,написать или обьяснить,как реализовать вот такой алгоритм
" 1.3.5.3 Сортировка слиянием
В данном методе мы предположим существование двух массивов, каждый из которых уже отсортирован по возрастанию. Цель состоит в том, что необходимо “слить” эти два массива (назовем их A, B) в результирующий (C) так, чтобы этот третий массив был отсортирован по возрастанию. Алгоритм данного метода может быть кратко изложен так:
1) необходимо взять из каждого из массивов самый первый элемент (очевидно, что это два самых маленьких элемента, которые вообще есть в наших двух массивах) и наименьший из них поместить в результирующий.
2) в том массиве, откуда мы изъяли один элемент, предположить, что первым будет тот, который находился ранее на второй позиции, по сути мы сдвигаем элементы на одну позицию влево.
3) необходимо повторять шаги 1,2 до тех пор, пока в каком-либо из массивов не закончатся числа.
Предположим, что это был массив A.
4) в результирующий массив C необходимо поместить все оставшиеся из массива В.
"
0
1394 / 1023 / 325
Регистрация: 28.07.2012
Сообщений: 2,813
23.10.2012, 13:30
Тырнул из своих старых исходников:
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
template< class T >
  VOID MergeSort( T *a, INT n )
  {
    if (n == 1)
      return ;
    INT i = n / 2;
    MergeSort(a, i);
    MergeSort(a + i, n - i);
 
    T *a1 = a;
    T *a2 = a + i;
    INT n1 = i, n2 = n - i;
     T *bulk = new T[n1 + n2];
    INT j = 0, k = 0, inc = 0;
    while (j < n1 && k < n2)
      if (a1[j] < a2[k])
        bulk[inc++] = a1[j++];
      else
        bulk[inc++] = a2[k++];
    if (j < n1)
      memcpy(bulk + inc, a1 + j, (n1 - j) * sizeof(INT));
    else if (k < n2)
      memcpy(bulk + inc, a2 + k, (n2 - k) * sizeof(INT));
    memcpy(a1, bulk, (n1 + n2) * sizeof(INT));
    delete[] bulk;
  }
template можно убрать, T заменить на тип массива - все будет работать. У нас есть изначально один массив, который разделяется на два подмассива(что и надо), которые опятьже сортируются...

Добавлено через 1 минуту
Нижняя часть как раз и ответственна за сливание вместе...
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
23.10.2012, 13:30
Помогаю со студенческими работами здесь

Шейкерная сортировка (перемешиванием)
Написать программу, в которой будет сортироваться массив с помощью шейкерной сортировки, то есть сначала снизу вверх, потом сверху вниз

Шейкерная сортировка массива
Не удается с внизсходящего поменять сортировку на вверхсходящую #include &lt;iostream&gt; #include &lt;windows.h&gt; #include...

Шейкерная сортировка двусвязного списка
Здравствуйте! У меня возникла проблема с сортировкой двусвязного списка. Получилось реализовать двусвязный список и отдельно...

Шейкерная сортировка без использования while цикла
Ребят, сделал шейкерную сортировку через два вложенных цикла - не работает. Не могу понять в чем проблема, подскажите пожалуйста. ...

Шейкерная сортировка массива (в виде функции)
Выполнить сортировку целочисленного массива(поиск в массиве) из n элементов. Алгоритм сортировки(поиска) Шейкер-сортировка, оформить в виде...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
Воспроизведение звукового файла с помощью 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, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru