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

не пойму в чем дело - C++

Восстановить пароль Регистрация
 
Belek
 Аватар для Belek
6 / 6 / 0
Регистрация: 15.12.2010
Сообщений: 200
04.01.2011, 16:31     не пойму в чем дело #1
всем привет! такая вот у меня проблема: две сортировки должны отсортировать массивы из 1000, 5000 и 10000 элементов и подсчитать время выполнения каждоу сортировки к каждому массиву. сортирует вроде нормально и с временем все кажется в порядке. ошибок программа не выдает, но перед тем как она запускается ваходит ошибка. может потому что я в функциях сортировок указал размерность массива 1000, пробовал исправить, не получается.
вот код:
и ошибка:
Миниатюры
не пойму в чем дело  
Вложения
Тип файла: txt code.txt (1.4 Кб, 16 просмотров)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
vx5
 Аватар для vx5
187 / 171 / 4
Регистрация: 04.09.2010
Сообщений: 656
04.01.2011, 16:46     не пойму в чем дело #2
C++
1
2
3
4
        for(int j=i-1;j>=0 && A[j]<v; j--)
            v=A[j];
        A[j+1]=A[j];
        A[j+1]=v;
странно, что у вас вообще как-то это работает. у меня еще при компиляции выдает ошибку.
У вас область в которой существует переменная j ограничивается циклом фор и одной инструкцией после нее. А вы потом еще пытаетесь использовать переменную, которой уже нету, она была была уничтожена при выходе из цикла.

Добавлено через 2 минуты
и если хотите чтобы фукнция получала могла работать с массивом, пусть она получает указатель на его первый элемент.
вот так:
C++
1
void INSERTION(int* A) {/* */}
Jupiter
Каратель
Эксперт C++
6542 / 3962 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
04.01.2011, 16:49     не пойму в чем дело #3
int main() а не просто main() + в сортировке вставками у вас выход за пределы массива
Belek
 Аватар для Belek
6 / 6 / 0
Регистрация: 15.12.2010
Сообщений: 200
05.01.2011, 18:35  [ТС]     не пойму в чем дело #4
мммм.. спасибо! буду смотреть и исправлять...

Добавлено через 6 часов 46 минут
переделал как смог, на сей раз использовал рандомизацию. получается у меня что сортировка вставкой сортирует 1000 элементов медленне пузырьковой. парадокс какой то. но той ошибки уже нету. пожалуйста, решите проблемы мешающие нормально работоспособности. заранее спасибо большое!
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
#include <iostream.h>
#include <time.h>
#include <fstream.h>
#include <stdlib.h>
 
void BUBBLE(int array[], int size)
{
         for(int i=0;i<size;i++)
            for(int j=0;j<(size-1);j++)
               if (array[j]>array[j+1])
               {
                 int b=array[j];
                 array[j]=array[j+1];
                 array[j+1]=b;
               }
}
 
 
void INSERTION(int array[], int size)
{
    for(int i=1;i<size;i++)
       {
            int v=array[i];
            for(int j=i-1;(j>=0 && array[j]<v); j--)
             {
                v=array[j];
                array[j+1]=array[j];
                array[j+1]=v;
             }
       }
}
 
void full(int array[],int size)
       {
         srand(time(0));
         for(int i=0;i<size;i++)
              array[i] = 1+rand()%1000;
       }
 
main(){
 
 
 
int array_1[1000];
full(array_1,(sizeof(array_1)/4));
 
int array_2[5000];
full(array_2,(sizeof(array_2)/4));
 
int array_3[10000];
full(array_3,(sizeof(array_3)/4));
 
double xtime[1][2];
clock_t mytime=clock();
 
 
INSERTION(array_1,(sizeof(array_1)/4));
xtime[1][0]=(double)(clock()-mytime)/1000;
 
INSERTION(array_2,(sizeof(array_2)/4));
xtime[1][1]=(double)(clock()-mytime)/1000;
 
INSERTION(array_3,(sizeof(array_3)/4));
xtime[1][2]=(double)(clock()-mytime)/1000;
 
 
 
BUBBLE(array_1,(sizeof(array_1)/4));
xtime[0][0]=(double)(clock()-mytime)/1000;
 
BUBBLE(array_2,(sizeof(array_2)/4));
xtime[0][1]=(double)(clock()-mytime)/1000;
 
BUBBLE(array_3,(sizeof(array_3)/4));
xtime[0][2]=(double)(clock()-mytime)/1000;
 
 
cout<<"bubble: "<<endl;
cout<<(sizeof(array_1)/4)<<" : "<<xtime[0][0]<<endl;
cout<<(sizeof(array_2)/4)<<" : "<<xtime[0][1]<<endl;
cout<<(sizeof(array_3)/4)<<" : "<<xtime[0][2]<<endl<<endl;
 
 
cout<<"insertion: "<<endl;
cout<<(sizeof(array_1)/4)<<" : "<<xtime[1][0]<<endl;
cout<<(sizeof(array_2)/4)<<" : "<<xtime[1][1]<<endl;
cout<<(sizeof(array_3)/4)<<" : "<<xtime[1][2]<<endl<<endl;
 
 
return 0;}
Yandex
Объявления
05.01.2011, 18:35     не пойму в чем дело
Ответ Создать тему
Опции темы

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