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

Упорядочить каждую строку матрицы по возрастанию абсолютных величин - C++

Восстановить пароль Регистрация
 
Nikkun
0 / 0 / 0
Регистрация: 14.12.2012
Сообщений: 25
08.04.2013, 20:35     Упорядочить каждую строку матрицы по возрастанию абсолютных величин #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
#include "stdafx.h"
#include <iostream>
#include <time.h>
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
    setlocale(LC_CTYPE,"Russian");
    int m, n;
    cout << "Введите количество строк от 1 до 10: \n";
    cin >> m;
    if (m>=1 && m<=10) cout<<"\n";
    else {cout<<"Так нельзя\n"; return 0;}
    cout << "Введите количество столбцов от 1 до 10: \n";
    cin >> n;
    if (n>=1 && n<=10) cout<<"\n";
    else {cout<<"Так нельзя\n"; return 0;}
    int **arr = new int *[m];
    for (int i = 0; i<m; i++)
    {
            arr[i] = new int[n];
            for (int j = 0; j<n; j++)
            {
                arr[i][j] = (rand()%99)-50;
                printf("%4i", arr[i][j]); 
            }
            cout << endl; 
    }
    cout<<"\n";
}
Заранее благодарен.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.04.2013, 20:35     Упорядочить каждую строку матрицы по возрастанию абсолютных величин
Посмотрите здесь:

C++ Упорядочить строки матрицы по возрастанию их характеристик
C++ Упорядочить столбцы матрицы по возрастанию их характеристик
Упорядочить строки матрицы по возрастанию их характеристик C++
C++ Упорядочить каждую строку матрицы по возрастанию абсолютных величин
C++ Матрица (упорядочить каждую строку по убыванию элементов)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
yoghurt92
373 / 344 / 22
Регистрация: 17.05.2012
Сообщений: 1,049
09.04.2013, 14:36     Упорядочить каждую строку матрицы по возрастанию абсолютных величин #2
Nikkun,

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
// obr.cpp : Defines the entry point for the console application.
//
 
#include "stdafx.h"
#include <iostream>
#include <time.h>
#include <math.h>
using namespace std;
 
int _tmain(int argc, _TCHAR* argv[])
{
    setlocale(LC_CTYPE,"Russian");
    int m, n;
    cout << "Введите количество строк от 1 до 10: \n";
    cin >> m;
    if (m>=1 && m<=10) cout<<"\n";
    else {cout<<"Так нельзя\n"; return 0;}
    cout << "Введите количество столбцов от 1 до 10: \n";
    cin >> n;
    if (n>=1 && n<=10) cout<<"\n";
    else {cout<<"Так нельзя\n"; return 0;}
    int **arr = new int *[m];
 
    for (int i = 0; i<m; i++)
    {
            arr[i] = new int[n];
            for (int j = 0; j<n; j++)
            {
                arr[i][j] = (rand()%99)-50;
                printf("%4i", arr[i][j]); 
            }
            cout << endl; 
    }
 
    for(int i = 0; i<m; i++)
        for(int j = 0; j<n-1; j++)
            for(int k = j + 1; k < n; k++)
            {
                if(abs(arr[i][j]) > abs(arr[i][k]))
                {
                    int t;
                    t = arr[i][j];
                    arr[i][j] = arr[i][k];
                    arr[i][k] = t;
                }
            }
 
 
    cout << endl << endl;
    for (int i = 0; i<m; i++)
    {
            for (int j = 0; j<n; j++)
            {
                printf("%4i", arr[i][j]); 
            }
            cout << endl; 
    }
    cout<<"\n";
}
Nikkun
0 / 0 / 0
Регистрация: 14.12.2012
Сообщений: 25
09.04.2013, 17:28  [ТС]     Упорядочить каждую строку матрицы по возрастанию абсолютных величин #3
Спасибо большое, а не подскажите как сделать методом вставки?
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
#include "stdafx.h"
#include <iostream>
#include <time.h>
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
    setlocale(LC_CTYPE,"Russian");
    int m, n;
    cout << "Введите количество строк от 1 до 10: \n";
    cin >> m;
    if (m>=1 && m<=10) cout<<"\n";
    else {cout<<"Так нельзя\n"; return 0;}
    cout << "Введите количество столбцов от 1 до 10: \n";
    cin >> n;
    if (n>=1 && n<=10) cout<<"\n";
    else {cout<<"Так нельзя\n"; return 0;}
    int **arr = new int *[m];
 
    for (int i = 0; i<m; i++)
    {
            arr[i] = new int[n];
            for (int j = 0; j<n; j++)
            {
                arr[i][j] = (rand()%99)-50;
                printf("%4i", arr[i][j]); 
            }
            cout << endl; 
    }
    int shift=0;
    int comparison=0;
    printf ("Метод пузырька:");
    for(int i = 0; i<m; i++)
        for(int j = 0; j<n-1; j++)
            for(int k = j + 1; k < n; k++)
            {
                if(abs(arr[i][j]) > abs(arr[i][k]))
                {
                    int t;
                    t = arr[i][j];
                    arr[i][j] = arr[i][k];
                    arr[i][k] = t;
                    shift++;
                }
                comparison++;
            }
 
 
    cout << endl << endl;
    for (int i = 0; i<m; i++)
    {
            for (int j = 0; j<n; j++)
            {
                printf("%4i", arr[i][j]); 
            }
            cout << endl; 
    }
    cout<<"\n";
    printf ("-------------------------------------------------------------\n");
    printf ("| Метод сортировки | Кол-во перестановок | Кол-во сравнений |\n");
    printf ("-------------------------------------------------------------\n");
    printf ("| Пузырьковый      | %19i | %16i |\n", shift, comparison);
}
yoghurt92
373 / 344 / 22
Регистрация: 17.05.2012
Сообщений: 1,049
09.04.2013, 18:54     Упорядочить каждую строку матрицы по возрастанию абсолютных величин #4
Nikkun, вот вам функция

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
template< class T >
void insertSort(T** a, int str, int stb) 
{
    T tmp;
    for(int i = 0, j, k; i < str; ++i)
        for(k = 1; k < stb; ++k)
        {
            tmp = a[i][k]; 
            for(j = k - 1; j >= 0 && abs(tmp) < abs(a[i][j]); --j) 
                a[i][j + 1] = a[i][j];    
            a[i][j + 1] = tmp;   
        }
}
Nikkun
0 / 0 / 0
Регистрация: 14.12.2012
Сообщений: 25
09.04.2013, 21:29  [ТС]     Упорядочить каждую строку матрицы по возрастанию абсолютных величин #5
template< class T > , я не понимаю что это и что с ним надо делать , поясните пожалуйста.
yoghurt92
373 / 344 / 22
Регистрация: 17.05.2012
Сообщений: 1,049
09.04.2013, 21:35     Упорядочить каждую строку матрицы по возрастанию абсолютных величин #6
Nikkun, так пойдет?

C++
1
2
3
4
5
6
7
8
9
10
11
12
void insertSort(int **a, int str, int stb) 
{
    int tmp;
    for(int i = 0, j, k; i < str; ++i)
        for(k = 1; k < stb; ++k)
        {
            tmp = a[i][k]; 
            for(j = k - 1; j >= 0 && abs(tmp) < abs(a[i][j]); --j) 
                a[i][j + 1] = a[i][j];    
            a[i][j + 1] = tmp;   
        }
}
Добавлено через 1 минуту
Nikkun, а вообще, это шаблон, я он позволяет функции работать не только с целыми типа, но и вещественными, строковыми, и все благодарю шаблону)
Nikkun
0 / 0 / 0
Регистрация: 14.12.2012
Сообщений: 25
09.04.2013, 22:05  [ТС]     Упорядочить каждую строку матрицы по возрастанию абсолютных величин #7
А как вывести значения сортировки в функции main ?
yoghurt92
373 / 344 / 22
Регистрация: 17.05.2012
Сообщений: 1,049
09.04.2013, 22:10     Упорядочить каждую строку матрицы по возрастанию абсолютных величин #8
Nikkun, матрица итак уже будет отсортирована, просто выведите ее и все)
Nikkun
0 / 0 / 0
Регистрация: 14.12.2012
Сообщений: 25
10.04.2013, 16:41  [ТС]     Упорядочить каждую строку матрицы по возрастанию абсолютных величин #9
Блин, что то я не понимаю как это сделать...

Добавлено через 26 минут
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
void insertSort(int **a, int str, int stb) 
{
    int tmp;
    for(int i = 0, j, k; i < str; ++i)
        for(k = 1; k < stb; ++k)
        {
            tmp = a[i][k]; 
            for(j = k - 1; j >= 0 && abs(tmp) < abs(a[i][j]); --j) 
                a[i][j + 1] = a[i][j];    
            a[i][j + 1] = tmp;   
        }
for(int i = 0, j, k; i < str; ++i)
for(k = 1; k < stb; ++k)
{
{
cout<<a[i][k];
cout<<" ";
}
cout<<"\n";
}
          
}
Добавлено через 41 минуту
А всё, разобрался, спасибо большое)
yoghurt92
373 / 344 / 22
Регистрация: 17.05.2012
Сообщений: 1,049
10.04.2013, 16:45     Упорядочить каждую строку матрицы по возрастанию абсолютных величин #10
Nikkun, старайтесь еще и код оформлять, читать легче будет, соответственно и разбираться
Nikkun
0 / 0 / 0
Регистрация: 14.12.2012
Сообщений: 25
12.04.2013, 19:20  [ТС]     Упорядочить каждую строку матрицы по возрастанию абсолютных величин #11
А не подскажете как сделать сортировку методом отбора?
yoghurt92
373 / 344 / 22
Регистрация: 17.05.2012
Сообщений: 1,049
12.04.2013, 21:04     Упорядочить каждую строку матрицы по возрастанию абсолютных величин #12
Nikkun, вот

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
#include <iostream>
#include <time.h>
#include <math.h>
using namespace std;
 
template <typename T>
void select(T** arr, int str, int stb){
    int i, j, z;
    bool exchange;
    T t;
 
    for(int k = 0; k < str; ++k){
        for(i = 0; i < stb-1; ++i){
            exchange = false;
            z = i;
            t = arr[k][i];
            for(j = i + 1; j < stb; ++j){
                if(abs(arr[k][j]) < abs(t)){
                    z = j;
                    t = arr[k][j];
                    exchange = true;
                }
            }
            if(exchange){
                arr[k][z] = arr[k][i];
                arr[k][i] = t;
            }
        }
    }
}
 
int _tmain(int argc, _TCHAR* argv[])
{
    setlocale(LC_CTYPE,"Russian");
    int m, n;
    cout << "Введите количество строк от 1 до 10: \n";
    cin >> m;
    if (m>=1 && m<=10) cout<<"\n";
    else {cout<<"Так нельзя\n"; return 0;}
    cout << "Введите количество столбцов от 1 до 10: \n";
    cin >> n;
    if (n>=1 && n<=10) cout<<"\n";
    else {cout<<"Так нельзя\n"; return 0;}
    int **arr = new int *[m];
 
    for (int i = 0; i<m; i++)
    {
            arr[i] = new int[n];
            for (int j = 0; j<n; j++)
            {
                arr[i][j] = (rand()%99)-50;
                printf("%4i", arr[i][j]); 
            }
            cout << endl; 
    }
 
    select(arr, n, m);
 
    cout << endl << endl;
    for (int i = 0; i<m; i++)
    {
            for (int j = 0; j<n; j++)
            {
                printf("%4i", arr[i][j]); 
            }
            cout << endl; 
    }
    cout<<"\n";
}
Nikkun
0 / 0 / 0
Регистрация: 14.12.2012
Сообщений: 25
14.04.2013, 20:13  [ТС]     Упорядочить каждую строку матрицы по возрастанию абсолютных величин #13
Мне уже неловко вас просить, а не поможете с быстрой сортировкой?
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11825 / 6804 / 769
Регистрация: 27.09.2012
Сообщений: 16,872
Записей в блоге: 2
Завершенные тесты: 1
14.04.2013, 23:42     Упорядочить каждую строку матрицы по возрастанию абсолютных величин #14
Алгоритмы сортировок
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.04.2013, 18:43     Упорядочить каждую строку матрицы по возрастанию абсолютных величин
Еще ссылки по теме:

C++ Упорядочить столбцы матрицы по возрастанию элементов
C++ Упорядочить по возрастанию главную диагональ матрицы
C++ Из абсолютных величин элементов массива выбрать наибольшую

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

Или воспользуйтесь поиском по форуму:
yoghurt92
373 / 344 / 22
Регистрация: 17.05.2012
Сообщений: 1,049
15.04.2013, 18:43     Упорядочить каждую строку матрицы по возрастанию абсолютных величин #15
Nikkun,

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
#include <iostream>
#include <time.h>
#include <math.h>
using namespace std;
 
void quick(int* a, int n) {
   int i = 0, j = n;        // поставить указатели на исходные места
   int temp, p;
 
   p = a[ n>>1 ];        // центральный элемент
 
   //p=n/2;
   // процедура разделения
   do {
      while ( abs(a[i]) < abs(p) ) i++;
      while ( abs(a[j]) > abs(p) ) j--;
 
      if (i <= j) {
         temp = a[i]; a[i] = a[j]; a[j] = temp;
         i++; j--;
      }
   } while ( i<=j );
 
   // рекурсивные вызовы, если есть, что сортировать
   if ( j > 0 ) quick(a, j);
   if ( n > i ) quick(a+i, n-i);
}
 
int _tmain(int argc, _TCHAR* argv[])
{
    setlocale(LC_CTYPE,"Russian");
    int m, n;
    cout << "Введите количество строк от 1 до 10: \n";
    cin >> m;
    if (m>=1 && m<=10) cout<<"\n";
    else {cout<<"Так нельзя\n"; return 0;}
    cout << "Введите количество столбцов от 1 до 10: \n";
    cin >> n;
    if (n>=1 && n<=10) cout<<"\n";
    else {cout<<"Так нельзя\n"; return 0;}
    int **arr = new int *[m];
 
    for (int i = 0; i<m; i++)
    {
            arr[i] = new int[n];
            for (int j = 0; j<n; j++)
            {
                arr[i][j] = (rand()%99)-50;
                printf("%4i", arr[i][j]); 
            }
            cout << endl; 
    }
 
    for (int v=0; v<n; v++)
    {
        quick(arr[v], n-1);
    }
 
    cout << endl << endl;
    for (int i = 0; i<m; i++)
    {
            for (int j = 0; j<n; j++)
            {
                printf("%4i", arr[i][j]); 
            }
            cout << endl; 
    }
    cout<<"\n";
}
Добавлено через 40 минут
Nikkun, и вот сортировка Шелла

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
#include <iostream>
#include <time.h>
#include <math.h>
using namespace std;
 
void InsertSort(int arr[], unsigned len, unsigned step) 
{
   unsigned i, j;
   int key;
   for (i = step; i < len; i += step) 
   {
      key = arr[i];
      j = i;
      while ((j > 0) && (abs(arr[j-step]) > abs(key)))
      {
         arr[j] = arr[j-step];
         j -= step;
      }
      arr[j] = key;
   }
 }
 
void ShellSort(int arr[], unsigned len)
{
   unsigned step = len / 2;
   while (step)
   {
      InsertSort(arr, len, step--);
   }
}
 
int _tmain(int argc, _TCHAR* argv[])
{
    setlocale(LC_CTYPE,"Russian");
    int m, n;
    cout << "Введите количество строк от 1 до 10: \n";
    cin >> m;
    if (m>=1 && m<=10) cout<<"\n";
    else {cout<<"Так нельзя\n"; return 0;}
    cout << "Введите количество столбцов от 1 до 10: \n";
    cin >> n;
    if (n>=1 && n<=10) cout<<"\n";
    else {cout<<"Так нельзя\n"; return 0;}
    int **arr = new int *[m];
 
    for (int i = 0; i<m; i++)
    {
            arr[i] = new int[n];
            for (int j = 0; j<n; j++)
            {
                arr[i][j] = (rand()%99)-50;
                printf("%4i", arr[i][j]); 
            }
            cout << endl; 
    }
 
    for (int v=0; v<n; v++)
    {
        ShellSort(arr[v], n);
    }
 
    cout << endl << endl;
    for (int i = 0; i<m; i++)
    {
            for (int j = 0; j<n; j++)
            {
                printf("%4i", arr[i][j]); 
            }
            cout << endl; 
    }
    cout<<"\n";
}
Yandex
Объявления
15.04.2013, 18:43     Упорядочить каждую строку матрицы по возрастанию абсолютных величин
Ответ Создать тему
Опции темы

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