Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Salvators
0 / 0 / 0
Регистрация: 17.02.2013
Сообщений: 13
#1

Сортировка массива - C++

17.02.2013, 18:59. Просмотров 294. Ответов 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
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
#include "stdafx.h"
#include <iostream>
#include <conio.h>
 
 
 
using namespace std;
void mergesort(int mas[], int N)
{
    int i, j, k, L, t;
    int h, m, p, q, r;
    bool up;
    up=true;
    p=1;
    //
    //while( p<N)
    do
    {
        h=1, m=N;
        if (up) { i=0; j=N-1; k=N; L=2*N-1;}
        else { k=0; L=N-1; i=N; j=2*N-1;}
 
        //while(m!=0)
        do
        {
            if (m>=p) q=p;
            else {q=m;}
            m=m-q;
            if (m>=p) r=p;
            else {r=m;}
            m=m-r;
            while(q>0 && r>0)
            {
                if (mas[i]<mas[j])
                {
                    mas[k]=mas[i];
                    k=k+h; 
                    i=i+1;
                    q=q-1;
                }
                else
                {
                    mas[k]=mas[j];
                    k=k+h;
                    j=j-1;
                    r=r-1;
                }
            }
            while(r>0)
            {
                mas[k]=mas[j];
                k=k+h;
                j=j-1;
                r=r-1;
            }
            while(q>0)
            {
                mas[k]=mas[i];
                k=k+h;
                i=i+1;
                q=q-1;
            }
            h=-h;
            t=k;
            k=L;
            L=t;
        }
        while(m=0);
        up=!(up);
        p=2*p;
    }
    while(p>=N);
    if(!(up))
    {
        for(i=0; i<N-1; i++)
        {//
            mas[i]=mas[i+N];
            
        }
    }
}
void printmas(int mas[], int N)
{
    int i;
    for(i=0; i<N; i++)
    {
        cout<<mas[i]<<" ";
    }
    cout<<"\n";
}
 
int _tmain(int argc, _TCHAR* argv[])
{
    int i;
    const int N=100;
    int mas[N];
    
    for(i=0; i<N; i++)
    {
        mas[i]=rand()%100;
 
    }
    cout<<"mas[]: ";
    printmas(mas, N);
    mergesort( mas, N);
    cout<<"Sorted mas[]: ";
    printmas(mas, N);
    getch();
    return 0;
}
Добавлено через 1 час 1 минуту
Цитата Сообщение от Salvators Посмотреть сообщение
Здравствуйте) Задание такое : написать сортировку простым слиянием, требуется это без использования рекурсии. Написал вот по Вирту, при компиляции выводятся какие-то большие числа.. Помогите обнаружить проблему, пожалуйста
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
#include "stdafx.h"
#include <iostream>
#include <conio.h>
 
 
 
using namespace std;
void mergesort(int mas[], int N)
{
    int i, j, k, L, t;
    int h, m, p, q, r;
    bool up;
    up=true;
    p=1;
    //
    //while( p<N)
    do
    {
        h=1, m=N;
        if (up) { i=0; j=N-1; k=N; L=2*N-1;}
        else { k=0; L=N-1; i=N; j=2*N-1;}
 
        //while(m!=0)
        do
        {
            if (m>=p) q=p;
            else {q=m;}
            m=m-q;
            if (m>=p) r=p;
            else {r=m;}
            m=m-r;
            while(q>0 && r>0)
            {
                if (mas[i]<mas[j])
                {
                    mas[k]=mas[i];
                    k=k+h; 
                    i=i+1;
                    q=q-1;
                }
                else
                {
                    mas[k]=mas[j];
                    k=k+h;
                    j=j-1;
                    r=r-1;
                }
            }
            while(r>0)
            {
                mas[k]=mas[j];
                k=k+h;
                j=j-1;
                r=r-1;
            }
            while(q>0)
            {
                mas[k]=mas[i];
                k=k+h;
                i=i+1;
                q=q-1;
            }
            h=-h;
            t=k;
            k=L;
            L=t;
        }
        while(m=0);
        up=!(up);
        p=2*p;
    }
    while(p>=N);
    if(!(up))
    {
        for(i=0; i<N-1; i++)
        {//
            mas[i]=mas[i+N];
            
        }
    }
}
void printmas(int mas[], int N)
{
    int i;
    for(i=0; i<N; i++)
    {
        cout<<mas[i]<<" ";
    }
    cout<<"\n";
}
 
int _tmain(int argc, _TCHAR* argv[])
{
    int i;
    const int N=8;
    int mas[N];
    
    for(i=0; i<N; i++)
    {
        mas[i]=rand()%100;
 
    }
    cout<<"mas[]: ";
    printmas(mas, N);
    mergesort( mas, N);
    cout<<"Sorted mas[]: ";
    printmas(mas, N);
    getch();
    return 0;
}
может N должно быть строго степени 2? P.S.Тема все еще в силе

Добавлено через 29 минут
Все, ребят, справился. Оказывается с циклами напутал
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.02.2013, 18:59
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Сортировка массива (C++):

Быстрая сортировка(сортировка Хоара). Отсортировать фрагмент массива - C++
Мне нужно отсортировать фрагмент массива, расположенный между первым и последним отрицательным элементом. Немогу понять как устоновить...

Сортировка массива: перенести положительные числа в начало, а отрицательные - в конец массива - C++
Дан вещественный массив A(N). Отсортировать его таким образом, чтобы все положительные числа находились в начале, а отрицательные - в конце...

Сортировка массива. Ошибка после ввода размерности массива - C++
подскажите почему после ввода размерности массива выдает ошибку #include&lt;iostream&gt; #include&lt;cstdlib&gt; #include&lt;conio&gt; using...

Сортировка массива структур через сортировку массива указателей - C++
Ошибка возникает в функции void sort(student **ppStud, int k, char ch). Кто видит ошибку - помогите, пожалуйста. Код программы: ...

Сортировка массива, вместо массива выводит мусор - C++
Здравствуйте Уважаемые жители форума! Есть рабочий код сортируем массив выбором поиск наименьшего значения, но почему выводит какой то...

Указатели массива и сортировка массива - C++
Доброго времени суток, вот бьюсь над проблемой, нужна программа которая б сортировку динамического массива (ввод с клавиатуры) из 10...

1
ming_ruport
0 / 0 / 0
Регистрация: 21.11.2011
Сообщений: 6
19.02.2013, 19:43 #2
Без рекурсии сложновато. Почему бы с помощью быстрой сортировки?
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.02.2013, 19:43
Привет! Вот еще темы с ответами:

Сортировка массива А-Я - C++
Как сортировать данные массива по алфавиту? Пытался через цикл for(char j='А';j&lt;='Я';j++), но не выходит. Вот сам список: ...

Сортировка массива - C++
У меня есть цель наклепать сортировку с помощью (1)прямого выбора и и сортировку (2)Шелла. Делаю все пошагово, сначала алгоритм действий...

Сортировка массива - C++
Нужно поставить числа от наименьшего к наибольшему # include &lt;iostream&gt; using namespace std; void main () {int i=0; int p; ...

Сортировка массива - C++
Здравствуйте! Вот имею такую задачу: Дано 2 массива a b, написать программу, которая изменяет данные массивы, в соответствии с правилом:...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.