gpt4 book ai didi

c++ - 尝试实现 HeapSort

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:04:44 24 4
gpt4 key购买 nike

我卡在 heapSort 上了。我有一些代码,但我认为它是错误的,因为我很难编译它。有什么建议么?堆排序应该很容易实现,但我有一堆语法错误。这是我的代码:

/* Framework for Heap Sort
* CS333 Spring 2011
*
*/
#include <stdio.h>
#define MAX_SIZE 1000000
int data[MAX_SIZE];
int n;
int j;

int parent(int j) {
if(j==1)
return 0;

if(j%2==0)
return ( (j / 2)-1);
else
return ( (j / 2));
}

int left(int j) {
return (2 * j) + 1;
}

int right(int j) {
return (2 * j) + 2;
}

void heapify(int data[], int j) {
int l = left(j), great;
int r = right(j);
if ( (data[l] > data[j]) && (l < sizeof(data))) {
great = l;
}
else {
great = j;
}
if ( (data[r] > data[great]) && (r < sizeof(data))) {
great = r;
}
if (great != j) {
int temp = data[j];
data[j] = data[great];
data[great] = temp;
heapify(data, great);
}
}

int BuildMaxHeap(int data[]) {
for (int j = (sizeof(data) - 1) / 2; j >= 0; j--) {
heapify(data, j);
return data;
}
}

void HeapSort(int data[]) {
BuildMaxHeap(data);
for (int j = sizeof(data); j > 0; j--) {
int temp = data[0];
data[0] = data[data.sizeof() - 1];
data[sizeof(data) - 1] = temp;
sizeof(data) = sizeof(data) - 1;
heapify(data, 0);
}

}

int main()
{
int i;

/* Read in the data */
n = 0;
while (scanf("%d", &data[n]) == 1)
++n;
/* Sort the numbers low to high */

HeapSort(data);

/* Print out the data */
for (i = 0; i < n; ++i)
printf("%d", data[i]);
}

最佳答案

您的大部分问题似乎都在您的 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 让您完成赋值)。

关于c++ - 尝试实现 HeapSort,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5024864/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com