Большинство ваших проблем, кажется, в вашей программе HeapSort:
void HeapSort(int data[]) {
BuildMaxHeap(data);
for (int j = sizeof(data); j > 0; j--) {
Когда вы передаете массив функции, подобной этой, то, что получает функция, на самом деле является указателем. Использование sizeof
для этого указателя не скажет вам о размере данных, на которые указывает указатель - он просто скажет вам, сколько байтов занимает сам указатель (обычно 4). Вы, вероятно, хотите передать размер массива в качестве параметра:
void HeapSort(int *data, size_t data_size) {
и на протяжении оставшейся части процедуры вы будете ссылаться на data_size
, а не sizeof(data)
.
int temp = data[0];
data[0] = data[data.sizeof() - 1];
data[sizeof(data) - 1] = temp;
sizeof(data) = sizeof(data) - 1;
sizeof(whatever)
также по существу постоянная, а не переменная; Вы не можете использовать его в качестве цели назначения (но, опять же, использование data_size
, как предложено выше позволит позволить вам выполнить назначение).