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

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

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 26, средняя оценка - 4.92
Spiritos
0 / 0 / 0
Регистрация: 12.05.2011
Сообщений: 12
01.09.2011, 16:15     Отсортировать массив с помощью сортировки методом вставки #1
Подскажите код,есть такая задачка...Дан двумерный массив заполненый с помощью генератора случайных чисел, отсортировать массив с помощью сортировки методом вставки!!!помогите плз!
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.09.2011, 16:15     Отсортировать массив с помощью сортировки методом вставки
Посмотрите здесь:

Отсортировать массив методом Шелла C++
C++ Динамический массив отсортировать по возростанию методом быстрой сортировки
Отсортировать масив методом пузырьковой сортировки C++
C++ Отсортировать столбцы матрицы методом вставки
C++ Отсортировать диагонали матрицы, параллельные главной, по убыванию элементов методом вставки
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Spiritos
0 / 0 / 0
Регистрация: 12.05.2011
Сообщений: 12
01.09.2011, 16:30  [ТС]     Отсортировать массив с помощью сортировки методом вставки #2
Генератор случайных чисел чушь выдавал и массив неверно отображало, студия читает не все библиотеки у меня 2008, думаю десятка мб лучше
Zverit
Уничтожитель печенек
 Аватар для Zverit
276 / 204 / 21
Регистрация: 07.02.2010
Сообщений: 723
01.09.2011, 16:37     Отсортировать массив с помощью сортировки методом вставки #3
Цитата Сообщение от Spiritos Посмотреть сообщение
Генератор случайных чисел чушь выдавал и массив неверно отображало
Ну можно было бы просто заполнить числами в ручную, для проверки. А уж потом при сохранении поставить ГСЧ. Было бы желание...
Евгений М.
1033 / 974 / 53
Регистрация: 28.02.2010
Сообщений: 2,817
Завершенные тесты: 2
01.09.2011, 16:38     Отсортировать массив с помощью сортировки методом вставки #4
Цитата Сообщение от Spiritos Посмотреть сообщение
Генератор случайных чисел чушь выдавал
Что из себя представляет чушь и как вызывали генератор случайных чисел?

Цитата Сообщение от Spiritos Посмотреть сообщение
массив неверно отображало
Как пытались отобразить массив?
-=ЮрА=-
Заблокирован
Автор 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:Написано на С++, если нужно могу в Си переделать
-=ЮрА=-
Заблокирован
Автор 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, ты вообще мой пост смотрел, для кого его написал???(
Отсортировать массив с помощью сортировки методом вставки
Spiritos
0 / 0 / 0
Регистрация: 12.05.2011
Сообщений: 12
01.09.2011, 17:31  [ТС]     Отсортировать массив с помощью сортировки методом вставки #7
а программка проверялась на работоспособность?
-=ЮрА=-
Заблокирован
Автор FAQ
01.09.2011, 17:37     Отсортировать массив с помощью сортировки методом вставки #8
Цитата Сообщение от Spiritos Посмотреть сообщение
а программка проверялась на работоспособность?
- результаты я не нарисовал!А что есть баг?В какой версии студии работаешь???Сейчас откомпилированный экзешник прикеплю, малоли что
Spiritos
0 / 0 / 0
Регистрация: 12.05.2011
Сообщений: 12
01.09.2011, 17:38  [ТС]     Отсортировать массив с помощью сортировки методом вставки #9
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
- результаты я не нарисовал!А что есть баг?В какой версии студии работаешь???Сейчас откомпилированный экзешник прикеплю, малоли что
есть 2008, но работаю в 2010
-=ЮрА=-
Заблокирован
Автор FAQ
01.09.2011, 17:40     Отсортировать массив с помощью сортировки методом вставки #10
Вот лови
Миниатюры
Отсортировать массив с помощью сортировки методом вставки  
Вложения
Тип файла: rar sort_mass2.exe.rar (18.2 Кб, 12 просмотров)
talis
 Аватар для talis
789 / 541 / 37
Регистрация: 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;
}
-=ЮрА=-
Заблокирован
Автор 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 - новый ввод
Spiritos
0 / 0 / 0
Регистрация: 12.05.2011
Сообщений: 12
02.09.2011, 01:57  [ТС]     Отсортировать массив с помощью сортировки методом вставки #13
Ок, щас попробую

Добавлено через 13 минут
Может дело в студии, тоже самое...((
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.09.2011, 16:30     Отсортировать массив с помощью сортировки методом вставки
Еще ссылки по теме:

Отсортировать методом быстрой сортировки элементы массива, стоящие на четных позициях C++
C++ Ввести двумерный массив и отсортировать его методом вставки
C++ Заполнить случайныйми числами одномерный динамический массив; отсортировать его методом пузырьковой сортировки

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

Или воспользуйтесь поиском по форуму:
Spiritos
0 / 0 / 0
Регистрация: 12.05.2011
Сообщений: 12
02.09.2011, 16:30  [ТС]     Отсортировать массив с помощью сортировки методом вставки #14
Всёёё...спасибо - здал!))
Yandex
Объявления
02.09.2011, 16:30     Отсортировать массив с помощью сортировки методом вставки
Ответ Создать тему
Опции темы

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