0 / 0 / 0
Регистрация: 06.01.2015
Сообщений: 1
1

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

06.01.2015, 17:08. Показов 3011. Ответов 2
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Помогите пожалуйста написать алгоритм сортировки посредством слияния списков
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
06.01.2015, 17:08
Ответы с готовыми решениями:

Решить задачу слияния 2 списков по какому-либо условию
4.Решить задачу слияния 2 списков по какому-либо условию. Например, к концу очереди добавить...

Нисходящая сортировка методом слияния
Добрый день ребята!!! Мне нужно сделать нисходящею сортировку методом слияния! Я набросал...

Сортировка списка методом слияния
Помогите пожалуйста сделать сортировку методом слияния. Очень выручите.... #include <iostream>...

Сортировка массива методом слияния
5. Разработать программу, выполняющую сортировку массива методом слияния. Массив предварительно...

2
542 / 163 / 79
Регистрация: 23.09.2013
Сообщений: 316
06.01.2015, 17:22 2
Я думаю это должно Вам помочь:
http://kvodo.ru/mergesort.html
0
2849 / 1997 / 987
Регистрация: 21.12.2010
Сообщений: 3,705
Записей в блоге: 10
08.01.2015, 00:58 3
Лучший ответ Сообщение было отмечено ByArt как решение

Решение

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
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <string.h>
 
void InsertionSort(int* pArr, int bInd, int eInd)
{
    int i, j, tmp;
    for(i = bInd; i <= eInd; ++i)
    {
        tmp = pArr[i];
        for(j = i - 1; j >= bInd && tmp < pArr[j]; --j)
        {
            pArr[j+1] = pArr[j];
        }
        pArr[j+1] = tmp;
    }
}
 
void Merge(int* pArr, int bInd, int mInd, int eInd)
{
    int* p = new int[mInd - bInd + 1];
    int* p1 = new int[eInd - mInd];
    memcpy(p, pArr+bInd, sizeof(int)*(mInd-bInd+1));
    memcpy(p1, pArr+mInd+1, sizeof(int)*(eInd-mInd));
    int n, m, k;
    for(n = 0, m = 0, k = 0; n < (mInd - bInd + 1) && m < (eInd - mInd); ++k)
    {
        pArr[bInd+k] = (p[n] < p1[m] ? p[n++] : p1[m++]);
    }
    memcpy(pArr + bInd + k, p1 + m, sizeof(int)*(eInd - mInd - m));
    memcpy(pArr + bInd + k, p + n, sizeof(int)*(mInd-bInd+1-n));
    delete [] p; p = 0;
    delete [] p1; p1 = 0;
}
 
void MergeSort(int* pArr, int bInd, int eInd)
{
    if(20 >= eInd - bInd)
    {
        InsertionSort(pArr, bInd, eInd);
    }
    else
    {
        int mInd = (bInd + eInd) / 2;
        MergeSort(pArr, bInd, mInd);
        MergeSort(pArr, mInd+1, eInd);
        Merge(pArr, bInd, mInd, eInd);
    }
}
 
int main()
{
    int const siz = 1e4;
    int* pArr = new int[siz];
    srand(time(0));
    for(int i = 0; i < siz; ++i)
    {
        pArr[i] = rand() % 10000 - 5000;
    }
    MergeSort(pArr, 0, siz - 1);
    for(int i = 0; i < siz; ++i)
    {
        printf("%d\n", pArr[i]);
    }
    delete [] pArr; pArr = 0;
    return 0;
}
0
08.01.2015, 00:58
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
08.01.2015, 00:58
Помогаю со студенческими работами здесь

Сортировка массива по возрастанию методом слияния
Дан одномерный массив из n (n≤10^6) элементов a1,a2,…,an.(|ai|≤2×10^9). Сортировать по возрастанию...

Быстрая сортировка (сортировка Хоара) для связных списков
есть у кого готовый алгоритм? или подскажите как реализовать

Сортировка слиянием. Метод абстрактного обменного слияния
Доброго времени суток, недавно начал разбираться с сортировкой слиянием, хотел бы освоить метод...

Сортировка массива методом естественного двухпутевого слияния
Всем привет! Вот задали задачку такую, и что - то никак не могу алгоритм сортировки реализовать:...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru