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

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

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

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

19.05.2013, 01:57. Просмотров 376. Ответов 6
Метки нет (Все метки)

Добрый вечер, подскажите пожалуйста, как переделать, что бы не менялся исходный массив при сортировке. Извините что текст в коде на укр.Спасибо.
Кликните здесь для просмотра всего текста
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;
    }
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.05.2013, 01:57
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Сортировка разными методами (C++):

Сортировка одномерного массива разными методами - C++
Нужно выполнить сортировку одномерного числового массива по следующим пунктам. Первую часть понимаю(а), дальше разобраться самому не...

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

Скорость парсинга ini файла разными методами - C++
Ввиду моей большой лени самому неохота проверять данный вопрос, может кто сталкивался с этим? Имеем ini файл достаточно большой, пусть на...

Нужно решение задачи об ограниченном рюкзаке разными методами - C++
Всем привет!!!может кто-нибудь помочь кодом,решение задачи об ограниченном рюкзаке разными методами?очень надо:(

Сортировка 2мя методами. - C++
Нужно написать 2ве программы сортировки. Одна - пирамидальная сортировка, другая - сортировка включением. Нужно, Очень срочно. Помогите...

Сортировка методами вставки и выбора - C++
Сортировка метод вставки и выбора ! Помогите написать код программы для этих методов сортировки..... Буду очень благодарен) И много...

6
mat_for_c
161 / 156 / 33
Регистрация: 26.04.2013
Сообщений: 701
Завершенные тесты: 2
19.05.2013, 02:04 #2
так вы передавайте в каждую функцию отдельную копию исходного массива.
0
faLek
99 / 100 / 7
Регистрация: 06.03.2012
Сообщений: 478
19.05.2013, 02:29 #3
mat_for_c, здесь и так передайтся в каждую функцию исходный массив,у меня всё в порядке работает...
0
valentyn1994
2 / 2 / 1
Регистрация: 21.02.2013
Сообщений: 13
19.05.2013, 02:56  [ТС] #4
Цитата Сообщение от faLek Посмотреть сообщение
mat_for_c, здесь и так передается в каждую функцию исходный массив,у меня всё в порядке работает...
После сортировки, я пытаюсь вывести массив(пункт меню 2) оно выводит уже отсортированный массив(Visual Studio 2010). И если использовать потом еще какой-то метод, то оно уже берет отсортированный массив(
0
faLek
99 / 100 / 7
Регистрация: 06.03.2012
Сообщений: 478
19.05.2013, 03:00 #5
valentyn1994, ну так и сказали бы что в этом загвоздка
0
valentyn1994
2 / 2 / 1
Регистрация: 21.02.2013
Сообщений: 13
19.05.2013, 08:54  [ТС] #6
Поможешь?
0
mat_for_c
161 / 156 / 33
Регистрация: 26.04.2013
Сообщений: 701
Завершенные тесты: 2
19.05.2013, 11:29 #7
faLek, valentyn1994, я же говорю
Цитата Сообщение от mat_for_c Посмотреть сообщение
передавайте в каждую функцию отдельную копию
, а не

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

Добавлено через 5 минут
valentyn1994, как только ты вызвал один метод с использованием своего входного массива, то он отсортировался и при вызове других методов будешь передавать отсортированный.
для сортировок передавай копию массива.
а для вывода - отсортированную копию, или просто копию, если нужно вывести исходный массив
0
19.05.2013, 11:29
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.05.2013, 11:29
Привет! Вот еще темы с ответами:

Сортировка двумерного массива 5 разными способами - C++
Помогите найти ошибку, пожалуйста =) Задача: Упорядочить каждую нечетную строку по возрастанию абсолютных величин, каждый четный...

union с методами - C++
Такой вопрос - когда в union-е поля, то все ясно - оно занимает место, равное наибольшему размеру типов его полей, а когда в нем есть ещё и...

Перегрузка с методами - C++
Здравствуйте. У меня проблема. Мне нужно перегрузить оператор &quot;+&quot;, но перегрузить так, чтобы внутри конструкции перегрузки, вызвался метод...

Работа с классами и их методами. - C++
Есть класс numerals, состоящий из двух дробных чисел. Среди методов - сложение, вычитание, деление и умножение этих двух чисел. Вот...


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

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

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