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

Сортировки. Требуется совет. - C++

Восстановить пароль Регистрация
 
DD
1 / 1 / 0
Регистрация: 20.09.2009
Сообщений: 27
04.04.2010, 16:06     Сортировки. Требуется совет. #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
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
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <time.h>
 
void bubble(char *items, int count);
void shaker(char *items, int count);
void shell(char *items, int count);
 
int main(void)
{
    FILE *fp;
    FILE *s1;
    FILE *s2;
    FILE *s3;
    char s[255];
    time_t start, end;
    volatile long unsigned t;
 
    printf("read file");
 
    if((fp = fopen("mass.txt", "r")) == NULL) {
        printf(" : error.\n");
        exit(1);
    }
 
    printf(" : ok.\n\n");
 
    while(!feof(fp)) {
        fgets(s, 253, fp);
    }
 
    start = time(NULL);
    bubble(s, strlen(s));
    end = time(NULL);
    s1 = fopen("bubble.txt", "w");
    fputs(s, s1);
    printf("Bubble sort : ok.\n");
    printf("time: %f s.\n\n", difftime(end, start));
 
    start = time(NULL);
    shaker(s, strlen(s));
    end = time(NULL);
    s2 = fopen("shaker.txt", "w");
    fputs(s, s2);
    printf("Cocktail shaker sort : ok.\n");
    printf("time: %f s.\n\n", difftime(end, start));
 
    start = time(NULL);
    shaker(s, strlen(s));
    end = time(NULL);
    s3 = fopen("shell.txt", "w");
    fputs(s, s3);
    printf("Donald Lewis Shell sort : ok.\n");
    printf("time: %f s.\n\n", difftime(end, start));
 
    fclose(fp);
    fclose(s1);
    fclose(s2);
    fclose(s3);
    return 0;
}
 
// bubble sort
void bubble(char *items, int count)
{
    register int a, b;
    register char t;
 
    for(a = 1; a < count; ++a)
        for(b = count-1; b >= a; --b) {
            if(items[b-1] > items[b]) {
                t = items[b-1];
                items[b-1] = items[b];
                items[b] = t;
            }
        }
}
 
// cocktail shaker sort
void shaker(char *items, int count)
{
    register int a;
    int exchange;
    char t;
 
    do{
        exchange = 0;
        for(a = count-1; a >0; --a) {
            if(items[a-1] > items[a]) {
                t = items[a-1];
                items[a-1] = items[a];
                items[a] = t;
                exchange = 1;
            }
        }
 
        for(a = 1; a < count; ++a) {
            if(items[a-1] > items[a]) {
                t = items[a-1];
                items[a-1] = items[a];
                items[a] = t;
                exchange = 1;
            }
        }
    } while(exchange);
}
 
// Donald Lewis Shell sort
void shell(char *items, int count)
{
    register int i, j, gap, k;
    char x, a[5];
 
    a[0] = 9; a[1] = 5; a[2] = 3; a[3] = 2; a[4] = 1;
 
    for(k = 0; k < 5; k++) {
        gap = a[k];
        for(i = gap; i < count; ++i) {
            x = items[i];
            for(j=i-gap; (x < items[j]) && (j >= 0); j = j-gap)
                items[j+gap] = items[j];
            items[j+gap] = x;
        }
    }
}


программа должна проводить три вида сортировок и выдавать результат по времени
поправьте или разберите код вкратце

Добавлено через 1 час 12 минут
up...)

Добавлено через 25 минут
создаю файл mass.txt, в нем то что будем сортировать, файлы bubble.txt, shell.txt и shaker.txt сами создадутся и в них будут отсортированные данные. Все верно?)

Добавлено через 1 час 10 минут
блин.. выдает, что сортировка заняла 0,00000 секунд =/
подскажите в чем ошибся ?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
niXman
Эксперт C++
 Аватар для niXman
3133 / 1445 / 49
Регистрация: 09.08.2009
Сообщений: 3,441
Записей в блоге: 2
04.04.2010, 16:14     Сортировки. Требуется совет. #2
ты время сортировки считаешь секундами
DD
1 / 1 / 0
Регистрация: 20.09.2009
Сообщений: 27
04.04.2010, 16:40  [ТС]     Сортировки. Требуется совет. #3
хм.. а как это исправить?
niXman
Эксперт C++
 Аватар для niXman
3133 / 1445 / 49
Регистрация: 09.08.2009
Сообщений: 3,441
Записей в блоге: 2
04.04.2010, 16:43     Сортировки. Требуется совет. #4
меряй микросекундами или миллисекундами.
DD
1 / 1 / 0
Регистрация: 20.09.2009
Сообщений: 27
05.04.2010, 00:04  [ТС]     Сортировки. Требуется совет. #5
а можно ли сделать так чтобы вместо времени строилась гистограмма показывающая сколько времени требовалось на сортировку.

Добавлено через 36 минут
Если можно, то как это реализовать? подскажите )

Добавлено через 2 часа 0 минут
up....

Добавлено через 3 часа 7 минут
Может кто нибудь протестировать прогу.. ? а то не могу догнать почему выходит нулевой результат.. Время мерял и миллисекундами - толку = 0

Добавлено через 1 час 22 минуты
Вопрос - как сделать чтобы из файла читалось не посимвольно, а пробел служил разделителем между числами?

up!
Yandex
Объявления
05.04.2010, 00:04     Сортировки. Требуется совет.
Ответ Создать тему
Опции темы

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