Почему в Debug программа работает, а в Release нет? - C (СИ)
Формулировка задачи:
Почему в Debug программа работает, а в Release нет?
Решение задачи: «Почему в Debug программа работает, а в Release нет?»
textual
Листинг программы
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <intrin.h>
#include <stdlib.h>
void ssort(int* a, int N) {
int t, isswap;
for (int i = N - 1; i >= 0; i--)
{
isswap = 1;
for (int j = 0; j < i; j++)
{
if (a[j] > a[j + 1])
{
t = a[j];
a[j] = a[j + 1];
a[j + 1] = t;
isswap = 0;
}
}
if (isswap == 1)
break;
}
}
void qs(int *arr, int a, int b)
{
if (a < b)
{
int l = a, r = b, t;
int piv = arr[(l + r) / 2];
do {
while (arr[l] < piv)
l++;
while (arr[r] > piv)
r--;
if (l <= r) {
t = arr[l];
arr[l] = arr[r];
arr[r] = t;
l++;
r--;
}
} while (l <= r);
qs(arr, a, r);
qs(arr, l, b);
}
}
int main()
{
unsigned __int64 start1, end1, start2, end2, all1, all2;
int N = 1000, sred = 0;
for (int x = 0; x < 10; x++)
{
do
{
int *A = new int[N];
int *B = new int[N];
for (int k = 0; k < N; k++)
{
A[k] = rand() % 100;
B[k] = A[k];
}
start1 = __rdtsc();
ssort(A, N);
end1 = __rdtsc();
all1 = end1 - start1;
start2 = __rdtsc();
qs(B, 0, N - 1);
end2 = __rdtsc();
all2 = end2 - start2;
N--;
} while (all1 > all2);
sred += N;
}
sred /= 10;
printf("%d\n", sred);
return 0;
}
Объяснение кода листинга программы
- Программа реализует сортировку массива методом быстрой сортировки (quick sort).
- Функция
ssortреализует сортировку массива методом выборочного сортировки (selection sort). - Функция
qsреализует быструю сортировку массива. - В функции
mainсоздается массив случайных целых чисел и выполняется 10 итераций сортировки с использованием разных методов. - На каждой итерации измеряется время выполнения сортировки с помощью функции
__rdtsc(), которая возвращает значение процессорного счетчика. - На каждой итерации выполняется сортировка массива методом выборочной сортировки и быстрой сортировки.
- Время выполнения каждой сортировки измеряется с помощью функции
__rdtsc(). - Если время выполнения быстрой сортировки больше, чем время выполнения выборочной сортировки, размер массива уменьшается на единицу, чтобы увеличить эффективность быстрой сортировки.
- После 10 итераций вычисляется среднее время выполнения каждой сортировки.
- Результат выводится на консоль.