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

Сортировка разными методами - C++

Восстановить пароль Регистрация
 
valentyn1994
2 / 2 / 1
Регистрация: 21.02.2013
Сообщений: 13
19.05.2013, 01:57     Сортировка разными методами #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
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
155
156
157
158
159
160
#include <stdio.h>
#include <locale>
#include <iostream>
#include <iomanip>
#include <ctime>
 
using namespace std;
 
int menu_select ();
int** gen(int *m,int *n);
void show(int **a,int m, int n);
void bulb(int **a,int m, int n);
void vubor(int **a,int m,int n);
 
void main()
{
    setlocale(LC_CTYPE, "Russian");
    srand(time(NULL));
    int m,n,**a;
    char choice;
    for (; ;) 
    {
        choice = menu_select ();
        switch (choice) 
        {
            case 1: a=gen(&m,&n); break;
            case 2: show(a,m,n); break;
            case 3: bulb(a,m,n); break;
            case 4: vubor(a,m,n); break;
            case 5:  break;
            case 6:  break;
            case 7: exit (0);
        }
    }
    system ("pause");
}
int menu_select ()
{
    char s [80];
    int c;
    printf ("\n1. Генерувати масив \n");
    printf ("2. Вивести масив \n");
    printf ("3. Бульбашковий \n");
    printf ("4. Вибором \n");
    printf ("5. Завантажити файл \n");
    printf ("6. Переможець \n");
    printf ("7. Вихiд \n");
    do 
    {
        cout<<"\n Введiть номер потрiбного пункту: ";
        _flushall();
        gets (s);
        c = atoi (s);
    } while (c <0 || c> 7);
    return c;
}
int** gen(int *m,int *n)
{
do 
    {
        cout <<"Введiть кiлькiсть рядкiв:";
        cin >>*m;
    }
while(*m <=0);
do {
        cout <<"Введiть кiлькiсть стовбчикiв:";
        cin >>*n;
    }
while(*n<=0);
 
int **a=new int*[*m];
    for(int i=0;i< *m;i++)
    {
        a[i]=new int [*n];
        for(int j=0;j< *n;j++)
        {
            a[i][j]=rand()%9;
        }   
    }
return a;
}
 
void show(int **a,int m, int n)
{
    for(int i=0;i< m;i++)
    {
        for(int j=0;j< n;j++)
            cout <<setw(2)<<a[i][j] << " ";
    cout <<endl;
    }
}
 
void bulb(int **a,int m, int n)
{
    int por=0,per=0;
 
    for (int k=0; k<n; k++)
    {
        for (int l=0; l<m; l++)
        {       
            for (int i=0; i<n; i++)
            {
                for (int j=m-1; j>0; j--)
                {
                    if (a[j][i]<a[j-1][i])
                    {
                        swap(a[j][i],a[j-1][i]);
                        per++;
                    }
                    por++;
                }
            }
 
        }
    }
 
    cout <<"Вiдсортований масив"<<endl;
    
    for(int i=0;i< m;i++)
    {
        for(int j=0;j< n;j++)
            cout <<setw(2)<<a[i][j] << " ";
    cout <<endl;
    }
 
    cout <<"Кiлькiсть порiвнянь: "<<por<<endl;
    cout <<"Кiлькiсть перемiщень: "<<per<<endl;
}
void vubor(int** temp,int m,int n)
{
    int por=0,per=0;
    int min=0;
    int k=m;
    for (int i=0; i<n; i++)
    {
        
        for (int j=0; j<m; j++)
            {
                min=j;
                for (int k=j+1; k<m; k++)
                {
                    if(temp[min][i]>temp[k][i])
                    {
                        swap(temp[min][i],temp[k][i]);
                    }
                }
                
            }
        
    }
 
    cout <<"Вiдсортований масив"<<endl;
    
    for(int i=0;i< m;i++)
    {
        for(int j=0;j< n;j++)
            cout <<setw(2)<<temp[i][j] << " ";
    cout <<endl;
    }
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
mat_for_c
 Аватар для mat_for_c
117 / 112 / 20
Регистрация: 26.04.2013
Сообщений: 591
Завершенные тесты: 2
19.05.2013, 02:04     Сортировка разными методами #2
так вы передавайте в каждую функцию отдельную копию исходного массива.
faLek
99 / 100 / 7
Регистрация: 06.03.2012
Сообщений: 478
19.05.2013, 02:29     Сортировка разными методами #3
mat_for_c, здесь и так передайтся в каждую функцию исходный массив,у меня всё в порядке работает...
valentyn1994
2 / 2 / 1
Регистрация: 21.02.2013
Сообщений: 13
19.05.2013, 02:56  [ТС]     Сортировка разными методами #4
Цитата Сообщение от faLek Посмотреть сообщение
mat_for_c, здесь и так передается в каждую функцию исходный массив,у меня всё в порядке работает...
После сортировки, я пытаюсь вывести массив(пункт меню 2) оно выводит уже отсортированный массив(Visual Studio 2010). И если использовать потом еще какой-то метод, то оно уже берет отсортированный массив(
faLek
99 / 100 / 7
Регистрация: 06.03.2012
Сообщений: 478
19.05.2013, 03:00     Сортировка разными методами #5
valentyn1994, ну так и сказали бы что в этом загвоздка
valentyn1994
2 / 2 / 1
Регистрация: 21.02.2013
Сообщений: 13
19.05.2013, 08:54  [ТС]     Сортировка разными методами #6
Поможешь?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.05.2013, 11:29     Сортировка разными методами
Еще ссылки по теме:

Изменить переменную методами класса C++
C++ Сортировка одномерного массива разными методами
C++ Работа с классами и методами
C++ Сортировка методами вставки и выбора
Двусвязный список с методами C++

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

Или воспользуйтесь поиском по форуму:
mat_for_c
 Аватар для mat_for_c
117 / 112 / 20
Регистрация: 26.04.2013
Сообщений: 591
Завершенные тесты: 2
19.05.2013, 11:29     Сортировка разными методами #7
faLek, valentyn1994, я же говорю
Цитата Сообщение от mat_for_c Посмотреть сообщение
передавайте в каждую функцию отдельную копию
, а не

Цитата Сообщение от faLek Посмотреть сообщение
здесь и так передайтся в каждую функцию исходный массив
КОПИЮ массива, а НЕ исходный массив передавать

Добавлено через 5 минут
valentyn1994, как только ты вызвал один метод с использованием своего входного массива, то он отсортировался и при вызове других методов будешь передавать отсортированный.
для сортировок передавай копию массива.
а для вывода - отсортированную копию, или просто копию, если нужно вывести исходный массив
Yandex
Объявления
19.05.2013, 11:29     Сортировка разными методами
Ответ Создать тему
Опции темы

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