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

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

Восстановить пароль Регистрация
 
Salvators
0 / 0 / 0
Регистрация: 17.02.2013
Сообщений: 13
17.02.2013, 18:59     Сортировка массива #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 минут
Все, ребят, справился. Оказывается с циклами напутал
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.02.2013, 18:59     Сортировка массива
Посмотрите здесь:

Сортировка массива C++
C++ Сортировка массива!
Указатели массива и сортировка массива C++
C++ Сортировка массива, вместо массива выводит мусор
C++ Сортировка массива
Сортировка массива структур через сортировку массива указателей C++
Сортировка массива C++
Сортировка массива. Ошибка после ввода размерности массива C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ming_ruport
0 / 0 / 0
Регистрация: 21.11.2011
Сообщений: 6
19.02.2013, 19:43     Сортировка массива #2
Без рекурсии сложновато. Почему бы с помощью быстрой сортировки?
Yandex
Объявления
19.02.2013, 19:43     Сортировка массива
Ответ Создать тему
Опции темы

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