首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >尝试实现HeapSort

尝试实现HeapSort
EN

Stack Overflow用户
提问于 2011-02-17 11:48:46
回答 1查看 1.6K关注 0票数 0

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

代码语言:javascript
复制
/* 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]);
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-02-17 12:04:32

您的大多数问题似乎都存在于HeapSort例程中:

代码语言:javascript
复制
void HeapSort(int data[]) {
  BuildMaxHeap(data);
  for (int j = sizeof(data); j > 0; j--) {

当你将一个数组传递给一个像这样的函数时,这个函数接收的实际上是一个指针。在该指针上使用sizeof不会告诉您指针所指向的数据的大小--它只会告诉您指针本身占用了多少字节(通常是4字节)。您可能希望将数组大小作为参数传递:

代码语言:javascript
复制
void HeapSort(int *data, size_t data_size) {

在整个例程的其余部分中,您将引用data_size,而不是sizeof(data)

代码语言:javascript
复制
int temp = data[0];
data[0] = data[data.sizeof() - 1];
data[sizeof(data) - 1] = temp;
sizeof(data) = sizeof(data) - 1;

sizeof(whatever)本质上也是一个常量,而不是一个变量;您不能将它用作赋值的目标(但是,同样,按照上面的建议使用data_size将允许您进行赋值)。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5024864

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档