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

Засечь время сортировки разных типов данных - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 16, средняя оценка - 4.63
Vlad_
7 / 7 / 0
Регистрация: 07.09.2012
Сообщений: 174
15.12.2012, 16:34     Засечь время сортировки разных типов данных #1
Всем доброго времени суток, нужно в программе засечь время выполнения сортировки разными способами, в моём случае это выборки и обмен,и для 3 типов данных с float char int, то есть в итоге будет 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
#include <iostream>
#include <time.h>
 
using namespace std;
 
int x, i,j;
 
float vstavki(){
    clock_t start = clock();
        for(i=0;i<n;i++){
            x=a[i];
            j=i;
            while(x<a[j-1]){
                a[j]=a[j-1]; j--;
            }
            a[j]=x;
        }
 
    return  (float) (clock() - start) / CLOCKS_PER_SEC
}
 
float obmen(){
    clock_t start = clock();
    for(i=0;i<n;i++){
        for(j=n-1;j>i;j--){
            if(a[j-1]>a[j]){
                x=a[j-1];
                a[j-1]=a[j];
                a[j]=x;
            }
        }
    }
 
    return  (float) (clock() - start) / CLOCKS_PER_SEC
}
int main()
{
    setlocale(NULL," ");
    int *a;
    a= new int [n];
    char *b;
    b= new char [b];
    float *c;
    c= new float [c];
    for (i=0;i<n;i++)
        *(a+i)=rand()%26+1;
    for (i=0;i<n;i++)
        *(b+i)=rand()%26+1;
    for (i=0;i<n;i++)
        *(c+i)=rand()%26+1;
    cout <<"Введите размерность сравнимаемых массивов\n";
    cin >> n;
    cout <<"Сортировка "<<n<<" елементов типа int методом вставки заняло "<<vstavki(a);
    cout <<"Сортировка "<<n<<" елементов типа char методом вставки заняло "<<vstavki(b);
    cout <<"Сортировка "<<n<<" елементов типа float методом вставки заняло "<<vstavki(c);
    cout <<"Сортировка "<<n<<" елементов типа int методом обмена заняло "<<obmen(a);
    cout <<"Сортировка "<<n<<" елементов типа char методом обмена заняло "<<obmen(b);
    cout <<"Сортировка "<<n<<" елементов типа float методом обмена заняло "<<obmen(c);
    system("pause");
    return 0;
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Kuzia domovenok
 Аватар для Kuzia domovenok
1882 / 1737 / 116
Регистрация: 25.03.2012
Сообщений: 5,907
Записей в блоге: 1
15.12.2012, 16:37     Засечь время сортировки разных типов данных #2
Цитата Сообщение от Vlad_ Посмотреть сообщение
Мне не совсем понятно как с помощью перегрузки функции можно передавать в одну и туже функцию массивы разных типов данных
никак. Си строго типизированный язык. "Перегрузка функции" именно что означает не "одну и ту же функцию", а несколько.
Нет, можно, конечно сейчас развести дискуссию по этому вопросу, упоминая разные костыли, как в соседней теме ( Как в vector поместить double, bool? ) Но думаю, автор только начинает изучать Си, и ему не это нужно
Vlad_
7 / 7 / 0
Регистрация: 07.09.2012
Сообщений: 174
15.12.2012, 16:42  [ТС]     Засечь время сортировки разных типов данных #3
Kuzia domovenok, ну а вообще как то же можно кроме вектора?
или хорошо как бы вы реализовали данную задачу.
Kuzia domovenok
 Аватар для Kuzia domovenok
1882 / 1737 / 116
Регистрация: 25.03.2012
Сообщений: 5,907
Записей в блоге: 1
15.12.2012, 16:44     Засечь время сортировки разных типов данных #4
я б написал шаблонную функцию сортировки
можно взять отсюда Алгоритмы сортировок
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
template< class T >
void bubbleSort(T* arr, int size)
{
    T tmp;
 
    for(int i = 0; i < size - 1; ++i) // i - номер прохода
    {            
        for(int j = 0; j < size - 1; ++j) // внутренний цикл прохода
        {     
            if (arr[j + 1] < arr[j]) 
            {
                tmp = arr[j + 1]; 
                arr[j + 1] = arr[j]; 
                arr[j] = tmp;
            }
        }
    }
}
Vlad_
7 / 7 / 0
Регистрация: 07.09.2012
Сообщений: 174
15.12.2012, 16:48  [ТС]     Засечь время сортировки разных типов данных #5
Kuzia domovenok, ага, а как в неё передавать массивы с символьные целые и с плавающей запятой,и если можно примените это на мой код, буду очень при очень признателен.
Kuzia domovenok
 Аватар для Kuzia domovenok
1882 / 1737 / 116
Регистрация: 25.03.2012
Сообщений: 5,907
Записей в блоге: 1
15.12.2012, 16:51     Засечь время сортировки разных типов данных #6
C++
1
2
3
4
5
6
7
int main(){
int a[5]={1, 5, 8, 1, 3};
bubbleSort<int>(a, 5);
float b[5]={1.0, 0.5, 0.8, 1.0, 0.3};
bubbleSort<float>(b, 5);
return 0;
}
MrGluck
Ворчун
Эксперт С++
 Аватар для MrGluck
4920 / 2663 / 243
Регистрация: 29.11.2010
Сообщений: 7,405
15.12.2012, 16:53     Засечь время сортировки разных типов данных #7
Для таймера: http://en.cppreference.com/w/cpp/chrono
Как правильно заметил Kuzia domovenok, при перегрузке пишется несколько функций, лишний копирайт, нам же необходимо одно и то же поведение для всех типов, так что только шаблоном.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.12.2012, 22:19     Засечь время сортировки разных типов данных
Еще ссылки по теме:

C++ Определить наибольшее из 3 чисел для данных разных типов
C++ Функция swap перестановки значений двух переменных для данных разных типов. Используйте template
C++ Простое создание строки из объектов разных типов данных

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

Или воспользуйтесь поиском по форуму:
Vlad_
7 / 7 / 0
Регистрация: 07.09.2012
Сообщений: 174
15.12.2012, 22:19  [ТС]     Засечь время сортировки разных типов данных #8
Всем спасибо итоговый код,кому понадобится может взять мой!
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
#include <iostream>
#include <time.h>
 
using namespace std;
 
template< class T >
float selectSort(T* arr, int size) 
{
    clock_t start = clock();
    T tmp;
    for(int i = 0; i < size; ++i) // i - номер текущего шага
    { 
        int pos = i; 
        tmp = arr[i];
        for(int j = i + 1; j < size; ++j) // цикл выбора наименьшего элемента
        {
            if (arr[j] < tmp) 
            {
                pos = j; 
                tmp = arr[j]; 
            }
        }
        arr[pos] = arr[i]; 
        arr[i] = tmp; // меняем местами наименьший с a[i]
    }
    return  (float) (clock() - start) / CLOCKS_PER_SEC;
}
 
 
    template< class T >
float bubbleSort(T* arr, int size)
{
    clock_t start = clock();
    T tmp;
 
    for(int i = 0; i < size - 1; ++i) // i - номер прохода
    {            
        for(int j = 0; j < size - 1; ++j) // внутренний цикл прохода
        {     
            if (arr[j + 1] < arr[j]) 
            {
                tmp = arr[j + 1]; 
                arr[j + 1] = arr[j]; 
                arr[j] = tmp;
            }
        }
    }
    return  (float) (clock() - start) / CLOCKS_PER_SEC;
}
 
 
int main()
{
    setlocale(NULL,"");
    int n;
    cout <<"Введите размерность сравнимаемых массивов\n";
    cin >> n;
    int *a;
    char *b;
    float *c;
    a = new int  [n];
    b = new char [n];
    c = new float [n];
    
    cout <<"Сортировка "<<n<<" елементов типа int методом вставки заняло "<<selectSort<int>(a, n)<<endl;
    cout <<"Сортировка "<<n<<" елементов типа char методом вставки заняло "<<selectSort<char>(b, n)<<endl;
    cout <<"Сортировка "<<n<<" елементов типа float методом вставки заняло "<<selectSort<float>(c, n)<<endl;
    cout <<"Сортировка "<<n<<" елементов типа int методом обмена заняло "<<bubbleSort<int>(a, n)<<endl;
    cout <<"Сортировка "<<n<<" елементов типа char методом обмена заняло "<<bubbleSort<char>(b, n)<<endl;
    cout <<"Сортировка "<<n<<" елементов типа float методом обмена заняло "<<bubbleSort<float>(c, n)<<endl;
    system("pause");
    return 0;
}
Yandex
Объявления
15.12.2012, 22:19     Засечь время сортировки разных типов данных
Ответ Создать тему
Опции темы

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