С Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

Войти
Регистрация
Восстановить пароль
 
Feytan
1 / 1 / 0
Регистрация: 09.12.2010
Сообщений: 93
#1

Показать процесс сортировки массива - C++

14.06.2011, 00:51. Просмотров 661. Ответов 10
Метки нет (Все метки)

Подскажите, какой код нужно добавить, чтобы в программе:
1) каждое случайное число было в кружочке;
2) показывался процесс сортировки масиива (как происходит перестановка).

Вот программа:

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
#include <iostream>
#include<time.h>
#include<windows.h>
 
using namespace std;
 
int main ()
{
        DWORD t1, t2, d_time;
        
        srand (time(NULL));
        
        int i, N, j, k;
        
        //Задаем количество элементов
        
        cout<<endl<<"Dlina massiva - N: "; //N - длина одномерного массива
        
        cin>>N;
        
        cout<<"\n"; 
        
        t1 = GetTickCount();
        
    if(N > 0)
    {
 
        //Резервируем место на диске под количество элементов
        
        int *a = new int[N+1];// резервируем память под массив на 1 элемент больше
 
         cout << "Vremennii massiv: " << endl;
         for(i=0; i<N; i++)
        {
                a[i]=rand()%100;
                cout<<a[i]<<" ";
        }            
        cout<<"\n";
        cout<< endl;
              
        int count=0;
        for (i = 0; i < N - 1; i++)
                {
                        for(j = N-1; j>i; j--)
                        if (a[j-1] > a[j])
                        {
                                swap(a[j], a[j-1]); count++;
                        }           
        }
        cout << "Otsortirovannii massiv: " << endl;        
        for (i = 0; i < N; i++)
                cout << a[i] << " ";
                cout<< endl;
                
        cout<<"\nKolichestvo sravnenii: "<<count;   
        cout<< endl;
        
        k=rand()%100;
        cout<< endl << "Sluchainoe chislo - k: " << k <<endl; //k - случайное число
        cout<< endl;
 
                i=0;
                while ((a[i]<k) && (i<N)) //ищем место, куда поставить случайное число
                        i++;
                for (j=N; j>i; j--) //сдвигаем все элементы массива на 1 в конец, чтобы вставить случайный элемент
                        a[j]=a[j-1];
 
                a[i]=k; //вставляем на найденное место случайный элемент
 
                cout << "Konechnii massiv: " << endl;        
        for (i = 0; i < N+1; i++)
                cout << a[i] << " ";
                cout <<"\n";
                
        delete [] a;
        }
        
        else cout<<"Chislo elementov ne mozhet byt <=0" << endl;
 
                 t2 = GetTickCount();
                d_time = t2 - t1;
                        
                cout<<"\nVremia raboti: "<<d_time<<" milisek\n";
 
    system("pause");
    
        return 0;
}
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.06.2011, 00:51
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Показать процесс сортировки массива (C++):

Пример быстрой сортировки массива строк и сортировки методом выбора - C++
Добрый вечер. Скиньте пожалуйста пример быстрой сортировки массива строк и сортировки массива строк методом выбора. Очень срочно надо,...

Составить программу сортировки одномерного числового массива от начала массива к элементу с заданным номером по убыванию (методом выбора) - C++
Помогите составить программу на С++. Заданный номер - 28.

Циклический вычислительный процесс (без массива) - C++
циклический вычислительный процесс (без массива). Определить номер члена ряда, величина которого меньше 0,6 ...

Циклический вычислительный процесс (без массива) - C++
Вычислить значения функции y=x^2+1;1≤x≤5,∆x=0,5 Сначала напечатать подряд все значения аргумента, затем все значения функции ...

Сортировки и организация массива - C++
Доброй ночи форумчане, пришлось обратиться к вам за помощью... Суть вопроса вот в чем... У меня есть одномерный массив, который нужно...

Функция сортировки массива - C++
Необходимо написать функцию сортировки массива структур с информацией по книгам по возрастанию года издания и возвращающую отсортированный...

10
Jupiter
Каратель
Эксперт С++
6561 / 3982 / 227
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
14.06.2011, 01:24 #2
Цитата Сообщение от Feytan Посмотреть сообщение
показывался процесс сортировки масиива (как происходит перестановка).
печатайте весь массив сразу после перестановки

Добавлено через 40 секунд
Цитата Сообщение от Feytan Посмотреть сообщение
1) каждое случайное число было в кружочке;
каком еще кружочке?
0
tylix
68 / 55 / 6
Регистрация: 10.06.2011
Сообщений: 149
14.06.2011, 05:11 #3
ТС используй скобки при выводе (5) (5)

cout<< "(" << a[i]<<") ";
0
Feytan
1 / 1 / 0
Регистрация: 09.12.2010
Сообщений: 93
14.06.2011, 09:47  [ТС] #4
Maxwe11,

Так это в коде есть и так... Мне нужно чтобы показывался сам процесс сортировки, т.е. чтобы показывалось как происходит переставление

tylix,

Не совсем так, мне говорили, что должно быть подключение графической библиотеки
0
co6ak
Кошковед
409 / 502 / 29
Регистрация: 12.04.2010
Сообщений: 1,392
14.06.2011, 10:09 #5
дык, вы хотя бы конкретизируйте что хотите получить в результате.

по поводу отображения сортировки, вставьте что-ли код в сортировку
C++
1
2
3
4
5
                        if (a[j-1] > a[j])
                        {
                                swap(a[j], a[j-1]); count++;
                                cout << a[j] << "->" << a[j-1]<< endl; // <-- вот этот 
                        }
1
Feytan
1 / 1 / 0
Регистрация: 09.12.2010
Сообщений: 93
14.06.2011, 11:33  [ТС] #6
co6ak,
Спасибо.

А как быть с 1 пунктом, кто нибудь знает?
0
co6ak
Кошковед
409 / 502 / 29
Регистрация: 12.04.2010
Сообщений: 1,392
14.06.2011, 11:40 #7
вот не ответил на мой вопрос ведь

как ты себе представляешь этот кружок? у тебя сугубо консольное приложение, я не представляю как залупить туда "кружок". тем более не понятно кто сказал подключить графическую либу
сделай как посоветовали выше
C++
1
2
3
4
5
         for(i=0; i<N; i++)
        {
                a[i]=rand()%100;
                cout<< "(" << a[i]<<") " ;
        }
0
Feytan
1 / 1 / 0
Регистрация: 09.12.2010
Сообщений: 93
14.06.2011, 12:00  [ТС] #8
co6ak,
Извени. Препод сказал, что как-то это можно сделать в досе, но для этого надо подключать графическую библиотеку.

Я потому и спрашивал, потому что сам слабо это себе представлял...

Вот измененный код (я добавил туда немного текста и сделал как было сказано выше):

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
#include <iostream>
#include<time.h>
#include<windows.h>
 
using namespace std;
 
int main ()
{
        DWORD t1, t2, d_time;
        
        srand (time(NULL));
        
        int i, N, j, k;
        
        //Задаем количество элементов
        
        cout<<"===V otsortirovannii massiv vstavit sluchainoe==="<<endl;
        cout<<"===chislo, chtobi on ostavalsya otsortirovannim==="<<endl;
        
        cout<<endl<<"Dlina massiva - N: "; //N - длина одномерного массива
        
        cin>>N;
        
        cout<<"\n"; 
        
        t1 = GetTickCount();
        
    if(N > 0)
    {
 
        //Резервируем место на диске под количество элементов
        
        int *a = new int[N+1];// резервируем память под массив на 1 элемент больше
 
         cout << "Vremennii massiv: " << endl;
         for(i=0; i<N; i++)
        {
                a[i]=rand()%100;
                cout<<"("<<a[i]<<")"<<" ";
        }            
        cout<<"\n";
        cout<< endl;
              
        int count=0;
        for (i = 0; i < N - 1; i++)
                {
                        for(j = N-1; j>i; j--)
                        if (a[j-1] > a[j])
                        {
                                swap(a[j], a[j-1]); count++; //сортировка + ее подсчет
                                cout<<"("<<a[j]<<")"<<"->"<<"("<<a[j-1]<<")"<<endl;  //показывает процесс сортировки
                                cout<<endl;
                        }           
        }
        cout << "Otsortirovannii massiv: " << endl;        
        for (i = 0; i < N; i++)
                cout<<"(" << a[i]<<")" << " ";
                cout<< endl;
                
        cout<<"\nKolichestvo sravnenii: "<<count;   
        cout<< endl;
        
        k=rand()%100;
        cout<< endl << "Sluchainoe chislo - k: "<<"(" << k <<")"<<endl; //k - случайное число
        cout<< endl;
 
                i=0;
                while ((a[i]<k) && (i<N)) //ищем место, куда поставить случайное число
                        i++;
                for (j=N; j>i; j--) //сдвигаем все элементы массива на 1 в конец, чтобы вставить случайный элемент
                        a[j]=a[j-1];
 
                a[i]=k; //вставляем на найденное место случайный элемент
 
                cout << "Konechnii massiv: " << endl;        
        for (i = 0; i < N+1; i++)
                cout<<"(" << a[i]<<")" << " ";
                cout <<"\n";
                cout<<"\nSovsem drugoe delo!!!"<<endl;
                
        delete [] a;
        }
        
        else cout<<"Chislo elementov ne mozhet byt <=0" << endl;
 
                 t2 = GetTickCount();
                d_time = t2 - t1;
                        
                cout<<"\nVremia raboti: "<<d_time<<" milisek\n";
                cout<<"\nDumaem pregde chem pisat!!!\n"<<endl;
    system("pause");
    
        return 0;
}
0
tylix
68 / 55 / 6
Регистрация: 10.06.2011
Сообщений: 149
14.06.2011, 12:00 #9
Feytan поищи на форуме как менять цвет выводимого текста в консоле,
на каждой итерации перестановки, выводи текущ. положение эл.массива, а перем-й эл. др. цветом

и будет тебе счастье, хоть и не в кружкЕ )
0
Feytan
1 / 1 / 0
Регистрация: 09.12.2010
Сообщений: 93
14.06.2011, 12:27  [ТС] #10
tylix,

Я вот попытался сделать только случайное число K красным цветом, но что-то идет не так. Вот код:

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
#include <iostream>
#include<time.h>
#include<windows.h>
 
using namespace std;
 
int main ()
{
        DWORD t1, t2, d_time;
        
        srand (time(NULL));
        
        int i, N, j, k;
        
        //Задаем количество элементов
        
        cout<<"===V otsortirovannii massiv vstavit sluchainoe==="<<endl;
        cout<<"===chislo, chtobi on ostavalsya otsortirovannim==="<<endl;
        
        cout<<endl<<"Dlina massiva - N: "; //N - длина одномерного массива
        
        cin>>N;
        
        cout<<"\n"; 
        
        t1 = GetTickCount();
        
    if(N > 0)
    {
 
        //Резервируем место на диске под количество элементов
        
        int *a = new int[N+1];// резервируем память под массив на 1 элемент больше
 
         cout << "Vremennii massiv: " << endl;
         for(i=0; i<N; i++)
        {
                a[i]=rand()%100;
                cout<<"("<<a[i]<<")"<<" ";
        }            
        cout<<"\n";
        cout<< endl;
              
        int count=0;
        for (i = 0; i < N - 1; i++)
                {
                        for(j = N-1; j>i; j--)
                        if (a[j-1] > a[j])
                        {
                                swap(a[j], a[j-1]); count++; //сортировка по возрастанию + ее подсчет
                                cout<<"("<<a[j]<<")"<<"->"<<"("<<a[j-1]<<")"<<endl;  //показывает процесс сортировки
                                cout<<endl;
                        }           
        }
        cout << "Otsortirovannii massiv: " << endl;        
        for (i = 0; i < N; i++)
                cout<<"(" << a[i]<<")" << " ";
                cout<< endl;
                
        cout<<"\nKolichestvo sravnenii: "<<count;   
        cout<< endl;
        
 
        k=rand()%100;
        system("color 0C");
        cout<< endl << "Sluchainoe chislo - k: "<<"(" << k <<")"<<endl; //k - случайное число
        cout<< endl;
 
                i=0;
                while ((a[i]<k) && (i<N)) //ищем место, куда поставить случайное число
                        i++;
                for (j=N; j>i; j--) //сдвигаем все элементы массива на 1 в конец, чтобы вставить случайный элемент
                        a[j]=a[j-1];
 
                a[i]=k; //вставляем на найденное место случайный элемент
 
                cout << "Konechnii massiv: " << endl;        
        for (i = 0; i < N+1; i++)
                cout<<"(" << a[i]<<")" << " ";
                cout <<"\n";
                cout<<"\n===Sovsem drugoe delo!!!==="<<endl;
                
        delete [] a;
        }
        
        else cout<<"Chislo elementov ne mozhet byt <=0" << endl;
 
                 t2 = GetTickCount();
                d_time = t2 - t1;
                        
                cout<<"\nVremia raboti: "<<d_time<<" milisek\n";
                cout<<"\n===Dumaem pregde chem pisat!!!===\n"<<endl;
    system("pause");
    
        return 0;
}
0
tylix
68 / 55 / 6
Регистрация: 10.06.2011
Сообщений: 149
14.06.2011, 13:41 #11
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
Я и рад бы .. да вот не приходилось мне радугу в консоле на Си рисовать )

На форуме где то видел эту тему, но где не знаю.. ща взгляну

Цвет фона консоли с++

Добавлено через 18 минут
надыбал рабочий примерчик
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 <iostream>
 
#include <windows.h> // WinApi header
 
using namespace std; //std::cout, std::cin
 
int main()
 
{
 
    HANDLE hConsole;
 
    int k;
 
    hConsole = GetStdHandle(STD_OUTPUT_HANDLE);     // you can loop k higher to see more color choices
 
    for(k = 1; k < 255; k++)     {
 
        // pick the colorattribute k you want
 
        SetConsoleTextAttribute(hConsole, k);
 
        cout << k << " I want to be nice today!" << endl;     }
 
    cin.get(); // wait
 
    return 0;
 
}
C++
1
2
SetConsoleTextAttribute(hConsole, 0x0F); // черный фон белый текст 
SetConsoleTextAttribute(hConsole, 0xF0); // белый фон черный текст
Добавлено через 22 минуты
думаю, эта функция тебе тоже пригодится, можно огранизовать вывод массива с каждым проходом в одном месте экрана... все остальное есть в MSDN

C++
1
2
3
4
5
COORD pos;
 
pos.X = 0; pos.Y = 0;
 
SetConsoleCursorPosition(hConsole, pos); // перемещаем курсор в лев. верх. угол
0
14.06.2011, 13:41
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.06.2011, 13:41
Привет! Вот еще темы с ответами:

Функция сортировки массива - C++
Дан массив целых чисел. Напишите функцию, которая получает данный массив в качестве аргумента и сортирует его по возрастанию, а также...

Функция сортировки массива - C++
Задание - необходимо осуществить сортировку, используя функцию. Я написал код, но он не работает. Прошу помочь его исправить. ...

Функция сортировки массива в структуре - C++
Помогите пожалуйста в написании функции осуществляющей перестановку строк двухмерного массива: первую и последнюю вторую и предпоследнюю,...

Написать подпрограмму сортировки массива - C++
Написать подпрограмму сортировки массива сортировка обменом(метод пузырька) последовательно сравниваются пары соседних элементов x(k) и...


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

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

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