0 / 0 / 0
Регистрация: 12.05.2011
Сообщений: 12
1

Отсортировать массив с помощью сортировки методом вставки

01.09.2011, 16:15. Показов 4400. Ответов 13
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Подскажите код,есть такая задачка...Дан двумерный массив заполненый с помощью генератора случайных чисел, отсортировать массив с помощью сортировки методом вставки!!!помогите плз!
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
01.09.2011, 16:15
Ответы с готовыми решениями:

Ввести двумерный массив и отсортировать его методом вставки
Суть программы в том чтобы ввести двумерный массив и отсортировать его методом вставки. Но вот что...

Отсортировать массив с помощью бинарной пирамидальной сортировки
Отсортируйте одномерный массив с помощью алгоритма бинарной пирамидальной сортировки.С++

Отсортировать двухмерный массив, методом быстрой сортировки
Всем привет. Помогите в решении задачи, у меня есть двухмерный массив, нужно отсортировать каждую...

Динамический массив отсортировать по возростанию методом быстрой сортировки
Отсортировать дин. масив по возростанию методом быстрой сортировки.

13
0 / 0 / 0
Регистрация: 12.05.2011
Сообщений: 12
01.09.2011, 16:30  [ТС] 2
Генератор случайных чисел чушь выдавал и массив неверно отображало, студия читает не все библиотеки у меня 2008, думаю десятка мб лучше
0
Уничтожитель печенек
281 / 209 / 49
Регистрация: 07.02.2010
Сообщений: 724
01.09.2011, 16:37 3
Цитата Сообщение от Spiritos Посмотреть сообщение
Генератор случайных чисел чушь выдавал и массив неверно отображало
Ну можно было бы просто заполнить числами в ручную, для проверки. А уж потом при сохранении поставить ГСЧ. Было бы желание...
0
1080 / 1007 / 106
Регистрация: 28.02.2010
Сообщений: 2,889
01.09.2011, 16:38 4
Цитата Сообщение от Spiritos Посмотреть сообщение
Генератор случайных чисел чушь выдавал
Что из себя представляет чушь и как вызывали генератор случайных чисел?

Цитата Сообщение от Spiritos Посмотреть сообщение
массив неверно отображало
Как пытались отобразить массив?
0
Заблокирован
Автор FAQ
01.09.2011, 16:42 5
Экономил время и силы, поэтому код не отличается большой элегантностью, но как срочняк думаю пойдёт
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
#include <iostream.h>//i/o
#include <stdlib.h>  //srand   
 
//Ðóññèôèêàöèÿ
ostream& operator<<(ostream &stream,char* s){
    for(char* ps=s; *ps; ps++){
        if(*ps=='¸')
            stream<<char(241);
        else if(*ps=='¨')
            stream<<char(240);
        else if(*ps>=-64 && *ps<=-17)           
            stream<<char(*ps+64+128);
        else if(*ps<0)
            stream<<char(*ps+64+176);
        else
            stream<<*ps;
    }
    return stream;
}
 
int GetRandNum(int NumMax);
void SortMass(int m, int n, int ** mass);
 
int main()
{
    char ch;
    int **mass,rows,cols,i,j;
    do
    {
        srand(0);
        cout<<"Ââåäèòå ÷èñëî ñòðîê ìàññèâà\r\n";
        cin>>rows;
        cout<<"Ââåäèòå ÷èñëî ñòîëáöîâ ìàññèâà\r\n";
        cin>>cols;
        cout<<"Èñõîäíûé ìàññèâ\r\n";
        mass = new int *[rows];
        for(i = 0; i < rows; i++)
        {
            mass[i] = new int[cols];
            for(j = 0; j < cols; j++)
                cout<<(mass[i][j] = GetRandNum(100))<<" ";
            cout<<"\r\n";
        }
        cout<<"Ìàññèâ ïîñëå ñîðòèðîâêè\r\n";
        SortMass(rows, cols, mass);
        cout<<"Y - íîâûé ââîä\r\n";
        cin>>ch;
    }
    while(ch == 'Y' || ch == 'y');
    return 0;
}
 
int GetRandNum(int NumMax)
{
    int val = rand();
    while(NumMax < val)
        val = rand();
    return val;
}
 
void SortMass(int m, int n, int ** mass)
{
    int * vec = new int[m*n],buf;
    for(int i = 0,j,k = 0; i < m; i++)
    {
        for(j = 0; j < n; j++,k++)
            vec[k] = mass[i][j];
    }
    for(i = 0; i < m*n; i++)
    for(j = i; j < m*n; j++)
    {
        if(vec[i] < vec[j])
        {
            buf = vec[i];
            vec[i] = vec[j];
            vec[j] = buf;
        }
    }
    for(i = 0,k = 0; i < m; i++)
    {
        for(j = 0; j < n; j++,k++)
            cout<<(mass[i][j] = vec[k])<<" ";
        cout<<"\r\n";
    }
    delete [] vec;
}
[Результат работы]
Введите число строк массива
5
Введите число столбцов массива
6
Исходный массив
38 1 24 6 24 4
100 73 90 3 32 45
57 12 85 82 24 31
19 91 88 7 35 23
90 81 22 74 4 44
Массив после сортировки
100 91 90 90 88 85
82 81 74 73 57 45
44 38 35 32 31 24
24 24 23 22 19 12
7 6 4 4 3 1
Y - новый ввод

PS:Написано на С++, если нужно могу в Си переделать
1
Заблокирован
Автор FAQ
01.09.2011, 16:55 6
Цитата Сообщение от Spiritos Посмотреть сообщение
сортировки методом вставки!!!
- упс у меня пузырьком было, вот исправленный под вставку прототип SortMass
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
void SortMass(int m, int n, int ** mass)
{
    int * vec = new int[m*n],buf;
    for(int i = 0,j,k = 0; i < m; i++)
    {
        for(j = 0; j < n; j++,k++)
            vec[k] = mass[i][j];
    }
    for(i = 1; i < k; i++)
    { 
        buf = vec[i];
        for(j = i - 1; j >= 0 && buf < vec[j]; j--)
            vec[j + 1]= vec[j]; //сдвиг на одну позицию
        vec[j + 1] = buf;
 
    }
    for(i = 0,k = 0; i < m; i++)
    {
        for(j = 0; j < n; j++,k++)
            cout<<(mass[i][j] = vec[k])<<" ";
        cout<<"\r\n";
    }
    delete [] vec;
}
[Результат работы]
Введите число строк массива
5
Введите число столбцов массива
6
Исходный массив
38 1 24 6 24 4
100 73 90 3 32 45
57 12 85 82 24 31
19 91 88 7 35 23
90 81 22 74 4 44
Массив после сортировки
1 3 4 4 6 7
12 19 22 23 24 24
24 31 32 35 38 44
45 57 73 74 81 82
85 88 90 90 91 100
Y - новый ввод
PS:Spiritos, ты вообще мой пост смотрел, для кого его написал???(
Отсортировать массив с помощью сортировки методом вставки
1
0 / 0 / 0
Регистрация: 12.05.2011
Сообщений: 12
01.09.2011, 17:31  [ТС] 7
а программка проверялась на работоспособность?
0
Заблокирован
Автор FAQ
01.09.2011, 17:37 8
Цитата Сообщение от Spiritos Посмотреть сообщение
а программка проверялась на работоспособность?
- результаты я не нарисовал!А что есть баг?В какой версии студии работаешь???Сейчас откомпилированный экзешник прикеплю, малоли что
0
0 / 0 / 0
Регистрация: 12.05.2011
Сообщений: 12
01.09.2011, 17:38  [ТС] 9
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
- результаты я не нарисовал!А что есть баг?В какой версии студии работаешь???Сейчас откомпилированный экзешник прикеплю, малоли что
есть 2008, но работаю в 2010
0
Заблокирован
Автор FAQ
01.09.2011, 17:40 10
Вот лови
Миниатюры
Отсортировать массив с помощью сортировки методом вставки  
Вложения
Тип файла: rar sort_mass2.exe.rar (18.2 Кб, 13 просмотров)
0
794 / 546 / 61
Регистрация: 11.05.2010
Сообщений: 1,298
Записей в блоге: 1
01.09.2011, 18:34 11
Лучший ответ Сообщение было отмечено Памирыч как решение

Решение

Позволю себе наглость предложить ещё вариант:

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
#include <stdlib.h>
#include <time.h>
 
#define ROWS    5  /* строк в матрице */
#define COLS    12 /* столбцов в матрице */
 
int array[ ROWS ][ COLS ];
 
void out_array_2d( int * begin, int * end, int columns )
{
    int i = 0;
 
    do
       printf( "%2d%c", *begin, ! ( ++i % columns ) ? '\n' : ' ' );
    while( ++begin != end );
}
 
void sort_array( int * begin, int * end )
{
    int *it, *it2;
    for( it = begin + 1; it != end; it++ )
    {
        for( it2 = it; it2 != begin && *it2 < *(it2 - 1); it2-- )
        {
            int tmp = *(it2 - 1);
            *(it2 - 1) = *it2;
            *it2 = tmp;
        }
    }
}
 
int main( int argc, char * argv[] )
{
    srand( time(0) );
 
    int * it;
 
    for( it = &array[0][0]; it != &array[ ROWS - 1 ][ COLS ]; it++ )
       *it = rand() % 99;
 
    puts( "Random array:" );
    out_array_2d( &array[0][0], &array[ ROWS - 1 ][ COLS ], COLS );
 
    sort_array( &array[0][0], &array[ ROWS - 1 ][ COLS ] );
 
    puts( "\nSorted array:" );
    out_array_2d( &array[0][0], &array[ ROWS - 1 ][ COLS ], COLS );
 
    return 0;
}
0
Заблокирован
Автор FAQ
01.09.2011, 21:46 12
Spiritos, попробуй для 10-ки преобразовать код и запись хедеров (<iostream> <cstdlib>)так как ниже, обрати внимание что ввёл using namespace std;

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
#include <iostream>//i/o
#include <cstdlib>  //srand 
 
using namespace std;  
 
//Руссификация
ostream& operator<<(ostream &stream,char* s){
        for(char* ps=s; *ps; ps++){
                if(*ps=='ё')
                        stream<<char(241);
                else if(*ps=='Ё')
                        stream<<char(240);
                else if(*ps>=-64 && *ps<=-17)                   
                        stream<<char(*ps+64+128);
                else if(*ps<0)
                        stream<<char(*ps+64+176);
                else
                        stream<<*ps;
        }
        return stream;
}
 
int GetRandNum(int NumMax);
void SortMass(int m, int n, int ** mass);
 
int main()
{
    char ch;
    int **mass,rows,cols,i,j;
    do
    {
        srand(0);
        std::cout<<"Введите число строк массива\r\n";
        std::cin>>rows;
        std::cout<<"Введите число столбцов массива\r\n";
        std::cin>>cols;
        std::cout<<"Исходный массив\r\n";
        mass = new int *[rows];
        for(i = 0; i < rows; i++)
        {
            mass[i] = new int[cols];
            for(j = 0; j < cols; j++)
                std::cout<<(mass[i][j] = GetRandNum(100))<<" ";
            std::cout<<"\r\n";
        }
        std::cout<<"Массив после сортировки\r\n";
        SortMass(rows, cols, mass);
        std::cout<<"Y - новый ввод\r\n";
        std::cin>>ch;
    }
    while(ch == 'Y' || ch == 'y');
    return 0;
}
 
int GetRandNum(int NumMax)
{
    int val = rand();
    while(NumMax < val)
        val = rand();
    return val;
}
 
void SortMass(int m, int n, int ** mass)
{
    int * vec = new int[m*n],buf;
    for(int i = 0,j,k = 0; i < m; i++)
    {
        for(j = 0; j < n; j++,k++)
            vec[k] = mass[i][j];
    }
    for(i = 1; i < k; i++)
    { 
        buf = vec[i];
        for(j = i - 1; j >= 0 && buf < vec[j]; j--)
            vec[j + 1]= vec[j]; //сдвиг на одну позицию
        vec[j + 1] = buf;
    }
    for(i = 0,k = 0; i < m; i++)
    {
        for(j = 0; j < n; j++,k++)
            std::cout<<(mass[i][j] = vec[k])<<" ";
        std::cout<<"\r\n";
    }
    delete [] vec;
}
[Работа алгоритма]
Введите число строк массива
7
Введите число столбцов массива
8
Исходный массив
38 1 24 6 24 4 100 73
90 3 32 45 57 12 85 82
24 31 19 91 88 7 35 23
90 81 22 74 4 44 46 8
94 7 28 10 38 1 100 73
55 60 62 58 14 22 40 35
2 31 83 24 16 81 47 32
Массив после сортировки
1 1 2 3 4 4 6 7
7 8 10 12 14 16 19 22
22 23 24 24 24 24 28 31
31 32 32 35 35 38 38 40
44 45 46 47 55 57 58 60
62 73 73 74 81 81 82 83
85 88 90 90 91 94 100 100
Y - новый ввод

Добавлено через 14 секунд
Spiritos, попробуй для 10-ки преобразовать код и запись хедеров (<iostream> <cstdlib>)так как ниже, обрати внимание что ввёл using namespace std;

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
#include <iostream>//i/o
#include <cstdlib>  //srand 
 
using namespace std;  
 
//Руссификация
ostream& operator<<(ostream &stream,char* s){
        for(char* ps=s; *ps; ps++){
                if(*ps=='ё')
                        stream<<char(241);
                else if(*ps=='Ё')
                        stream<<char(240);
                else if(*ps>=-64 && *ps<=-17)                   
                        stream<<char(*ps+64+128);
                else if(*ps<0)
                        stream<<char(*ps+64+176);
                else
                        stream<<*ps;
        }
        return stream;
}
 
int GetRandNum(int NumMax);
void SortMass(int m, int n, int ** mass);
 
int main()
{
    char ch;
    int **mass,rows,cols,i,j;
    do
    {
        srand(0);
        std::cout<<"Введите число строк массива\r\n";
        std::cin>>rows;
        std::cout<<"Введите число столбцов массива\r\n";
        std::cin>>cols;
        std::cout<<"Исходный массив\r\n";
        mass = new int *[rows];
        for(i = 0; i < rows; i++)
        {
            mass[i] = new int[cols];
            for(j = 0; j < cols; j++)
                std::cout<<(mass[i][j] = GetRandNum(100))<<" ";
            std::cout<<"\r\n";
        }
        std::cout<<"Массив после сортировки\r\n";
        SortMass(rows, cols, mass);
        std::cout<<"Y - новый ввод\r\n";
        std::cin>>ch;
    }
    while(ch == 'Y' || ch == 'y');
    return 0;
}
 
int GetRandNum(int NumMax)
{
    int val = rand();
    while(NumMax < val)
        val = rand();
    return val;
}
 
void SortMass(int m, int n, int ** mass)
{
    int * vec = new int[m*n],buf;
    for(int i = 0,j,k = 0; i < m; i++)
    {
        for(j = 0; j < n; j++,k++)
            vec[k] = mass[i][j];
    }
    for(i = 1; i < k; i++)
    { 
        buf = vec[i];
        for(j = i - 1; j >= 0 && buf < vec[j]; j--)
            vec[j + 1]= vec[j]; //сдвиг на одну позицию
        vec[j + 1] = buf;
    }
    for(i = 0,k = 0; i < m; i++)
    {
        for(j = 0; j < n; j++,k++)
            std::cout<<(mass[i][j] = vec[k])<<" ";
        std::cout<<"\r\n";
    }
    delete [] vec;
}
[Работа алгоритма]
Введите число строк массива
7
Введите число столбцов массива
8
Исходный массив
38 1 24 6 24 4 100 73
90 3 32 45 57 12 85 82
24 31 19 91 88 7 35 23
90 81 22 74 4 44 46 8
94 7 28 10 38 1 100 73
55 60 62 58 14 22 40 35
2 31 83 24 16 81 47 32
Массив после сортировки
1 1 2 3 4 4 6 7
7 8 10 12 14 16 19 22
22 23 24 24 24 24 28 31
31 32 32 35 35 38 38 40
44 45 46 47 55 57 58 60
62 73 73 74 81 81 82 83
85 88 90 90 91 94 100 100
Y - новый ввод
1
0 / 0 / 0
Регистрация: 12.05.2011
Сообщений: 12
02.09.2011, 01:57  [ТС] 13
Ок, щас попробую

Добавлено через 13 минут
Может дело в студии, тоже самое...((
0
0 / 0 / 0
Регистрация: 12.05.2011
Сообщений: 12
02.09.2011, 16:30  [ТС] 14
Всёёё...спасибо - здал!))
0
02.09.2011, 16:30
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
02.09.2011, 16:30
Помогаю со студенческими работами здесь

Заполнить массив случайными числами и отсортировать его методом быстрой сортировки по убыванию
Написать программу на с++ которая заполняет массив случайными числами и сортирует их методом...

Заполнить случайныйми числами одномерный динамический массив; отсортировать его методом пузырьковой сортировки
В плюсах полный ноль...помогите пожалуйста создать одномерный массив через new и delete его...

Отсортировать столбцы матрицы методом вставки
void Matrix::Sort_Matrix() { for (int k=0; k&lt;Col; ++k) { for (int i = 1,j; i&lt;Row; i++)...

Отсортировать в алфавитном порядке данные методом вставки
Здравствуйте, подскажите каким образом происходит сортировка в алфавитном порядке? Например дан...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru