Я делаю эту функцию, которая подсчитывает общее количество перестановок и сравнений, которые бы в целом выполняла функция быстрой сортировки.Однако, когда я запускаю его, я получаю эту ошибку:
ошибка C4700: неинициализированная локальная переменная 'quick' используется
Это происходит в операторе 'if' дляБазовый случай указан в коде функции ниже.SwapandComp - это имя структуры, которую я использую для отслеживания как свопов, так и сравнений для сортировки, а раздел - это функция, в которой мы находим место для разделения исходного массива, а также подсчитываем свопы и сравнения.
int partition(int numbers[], int i, int k) {
int l = 0;
int h = 0;
int midpoint = 0;
int pivot = 0;
int temp = 0;
bool done = false;
// Pick middle element as pivot
midpoint = i + (k - i) / 2;
pivot = numbers[midpoint];
l = i;
h = k;
while (!done) {
// Increment l while numbers[l] < pivot
while (numbers[l] < pivot) {
++l;
totalComps++;
}
// Decrement h while pivot < numbers[h]
while (pivot < numbers[h]) {
--h;
totalComps++;
}
// If there are zero or one elements remaining,
// all numbers are partitioned. Return h
if (l >= h) {
totalComps++;
done = true;
}
else {
// Swap numbers[l] and numbers[h],
// update l and h
temp = numbers[l];
numbers[l] = numbers[h];
numbers[h] = temp;
totalSwaps++;
++l;
--h;
}
}
return h;
}
А теперь вот функция быстрой сортировки.Как упоминалось ранее, SwapandComp - это структура, которую я использовал для отслеживания как свопов, так и сравнений.
SwapandComp quicksort(int numbers[], int i, int k) {
SwapandComp quick;
int j = 0;
int z = 0;
// Base case: If there are 1 or zero elements to sort,
// partition is already sorted
if (i >= k) {
return quick;
}
// Partition the data within the array. Value j returned
// from partitioning is location of last element in low partition.
j = partition(numbers, i, k);
// Recursively sort low partition (i to j) and
// high partition (j + 1 to k)
quickSort(numbers, i, j);
quicksort(numbers, j + 1, k);
quick.swaps = totalSwaps;
quick.comps = totalComps;
return quick;
}
Во второй строке я пишу
SwapandComp quick;
, чтобы использовать для быстрогосортировать структуру.Ошибка на самом деле не имеет смысла для меня, потому что я объявил «быстро» как новую структуру, чтобы функция возвращала.Любая помощь приветствуется!Спасибо!