- •Постановка задачи
- •Выполнение работы
- •Профилирование программы porost0.C
- •Профилирование программы test_cyc.C
- •Профилирование программы test_sub.C
- •1000*1000 Повторений
- •2000*1000 Повторений
- •5000*1000 Повторений
- •10000*1000 Повторений
- •Профилирование программы QuickSort.Cpp
- •Профилирование программы QuickSort.Pas
-
Профилирование программы QuickSort.Cpp
Address |
Line |
Source |
Clockticks (EBS) |
Timer (TBS) |
|
1 |
void swap (float &p, float &q) |
|
|
0x1000 |
2 |
{ |
918 |
879 |
|
3 |
float hold; |
|
|
0x101E |
4 |
hold = p; |
75 |
73 |
0x1026 |
5 |
p = q; |
9 |
20 |
0x1030 |
6 |
q = hold; |
10 |
10 |
|
7 |
|
|
|
0x1038 |
8 |
} |
31 |
52 |
|
9 |
|
|
|
|
10 |
|
|
|
|
11 |
void quicksort(float x[], int n) |
|
|
0x1040 |
12 |
{ |
209 |
234 |
|
13 |
int left[20], right[20]; |
|
|
|
14 |
int i,j,sp,mid; |
|
|
|
15 |
float pivot; |
|
|
|
16 |
|
|
|
0x105E |
17 |
left[1] = 1; |
5 |
6 |
0x1065 |
18 |
right[1] = n; |
2 |
|
0x106E |
19 |
sp = 1; |
|
1 |
|
20 |
|
|
|
0x1078 |
21 |
while (sp>0) |
15 |
29 |
|
22 |
{ |
|
|
0x1085 |
23 |
if (left[sp] >= right[sp]) |
41 |
57 |
0x109E |
24 |
{ sp = sp-1; } |
17 |
24 |
0x10AD |
25 |
else |
3 |
1 |
|
26 |
{ |
|
|
0x10B2 |
27 |
i = left[sp]; |
36 |
35 |
0x10C2 |
28 |
j = right[sp]; |
3 |
9 |
0x10D5 |
29 |
pivot = x[j]; |
24 |
28 |
0x10E7 |
30 |
mid = (i+j) % 2; |
24 |
21 |
0x1105 |
31 |
if ((j-i)>5) |
1 |
5 |
0x111A |
32 |
if (((x[mid]<pivot) && (x[mid]>x[i])) || ((x[mid]>pivot) && (x[mid]<x[i]))) |
28 |
35 |
0x118A |
33 |
swap(x[mid],x[j]); |
|
|
0x11AC |
34 |
else |
|
|
0x11B1 |
35 |
if (((x[i]<x[mid]) && (x[i]>pivot)) || ((x[i]>x[mid]) && (x[i]<pivot))) |
16 |
14 |
0x1221 |
36 |
swap(x[i],x[j]); |
2 |
6 |
0x1243 |
37 |
pivot = x[j]; |
16 |
20 |
0x1255 |
38 |
while (i<j) |
16 |
5 |
|
39 |
{ |
|
|
0x1267 |
40 |
while (x[i]<pivot) |
89 |
113 |
0x1280 |
41 |
{ i = i+1; } |
56 |
36 |
0x1291 |
42 |
j = j-1; |
47 |
46 |
0x12A0 |
43 |
while ((i<j) && (pivot<x[j])) |
71 |
74 |
0x12C7 |
44 |
{ j = j-1; } |
7 |
6 |
0x12D8 |
45 |
if (i<j) |
27 |
29 |
0x12E6 |
46 |
{ swap(x[i],x[j]); } |
|
3 |
0x1308 |
47 |
} // while |
|
4 |
0x130D |
48 |
j = right[sp]; // pivot to i |
11 |
18 |
0x1320 |
49 |
swap(x[i],x[j]); |
24 |
36 |
0x1342 |
50 |
if (i-left[sp]>=right[sp]-i) |
20 |
20 |
|
51 |
{ // put shorter part first |
|
|
0x1369 |
52 |
left[sp+1] = left[sp]; |
2 |
5 |
0x137D |
53 |
right[sp+1] = i-1; |
12 |
14 |
0x1393 |
54 |
left[sp] = i+1; |
6 |
8 |
|
55 |
} |
|
|
0x13A6 |
56 |
else |
|
|
|
57 |
{ |
|
|
0x13A8 |
58 |
left[sp+1] = i+1; |
1 |
|
0x13BB |
59 |
right[sp+1] = right[sp]; |
1 |
7 |
0x13D5 |
60 |
right[sp] = i-1; |
9 |
6 |
|
61 |
} |
|
|
0x13EB |
62 |
sp = sp+1; // push stack |
13 |
8 |
|
63 |
} // if |
|
|
0x13FA |
64 |
} // while |
5 |
6 |
|
65 |
|
|
|
|
66 |
|
|
|
0x13FF |
67 |
} |
9 |
5 |
|
68 |
|
|
|
|
69 |
|
|
|
|
70 |
|
|
|
|
71 |
int main() |
|
|
0x1450 |
72 |
{ |
|
|
0x146E |
73 |
for (int k = 1; k < 900000; k++) |
3 |
2 |
|
74 |
{ |
|
|
0x1489 |
75 |
float array[] = {0, 1, 3, 2, 12, 5, 9, 7, 14}; |
10 |
5 |
|
76 |
|
|
|
|
77 |
//for (int k = 1; k < 9; k++) |
|
|
|
78 |
// { printf ("%f\n", array[k]); } |
|
|
|
79 |
|
|
|
|
80 |
//printf ("================\n"); |
|
|
0x14C8 |
81 |
quicksort(array, 8); |
2 |
1 |
|
82 |
//for (k = 1; k < 9; k++) |
|
|
|
83 |
// { printf ("%f\n", array[k]); } |
|
|
0x14D6 |
84 |
} |
|
|
0x14D8 |
85 |
return 0; |
|
|
0x14DA |
86 |
} |
|
|