关于堆排序算法,我这个算法调不出来啊!

dqdx_zch 2008-11-18 11:20:00
#include "stdafx.h"
#include <iostream>
using namespace std;

void HEAPSORT(int *, size_t);
void MAX_HEAPIFY(int *, int, size_t);
void BUILD_MAX_HEAP(int *, size_t);
void EXCANGE(int& ,int&);


int _tmain(int argc, _TCHAR* argv[])
{
int arry[10] = {4, 1, 3, 2, 16, 9, 10, 14, 8, 7};
size_t sz = sizeof(arry) / sizeof(*arry);
HEAPSORT(arry, sz);
for (size_t i = 0; i != sz; ++i)
{
cout << arry[i];
}
cout << endl;
return 0;
}

void HEAPSORT(int *arry, size_t sz)
{
BUILD_MAX_HEAP(arry, sz);
for(size_t i = sz - 1; i >= 1; --i)
{
EXCANGE(arry[0], arry[i]);
MAX_HEAPIFY(arry, 0, i - 1);
}
}

void BUILD_MAX_HEAP(int *arry, size_t sz)
{
for(size_t i = sz / 2 - 1; i >= 0; --i)
{
MAX_HEAPIFY(arry, i, sz - 1);
}
}

void MAX_HEAPIFY(int *arry, size_t i, size_t sz)
{
size_t l, r, largest;
l = 2 * i + 1;
r = 2 * i + 2;
if(l <= sz - 1 && arry[l] > arry[i])
{
largest = l;
}
else
{
largest = i;
}
if (r <= sz - 1 && arry[r] > arry[largest])
{
largest = r;
}
if(largest != i)
{
EXCANGE(arry[i], arry[largest]);
MAX_HEAPIFY(arry, largest, sz - 1);
}
}

void EXCANGE(int &a, int &b)
{
int temp;
temp = a;
a = b;
b = temp;
}
哪位高手给我调一下,我感觉没有错误啊,就是调不出来
...全文
73 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
太乙 2008-11-19
  • 打赏
  • 举报
回复

#include <iostream>
using namespace std;

void HEAPSORT(int *, size_t);
void MAX_HEAPIFY(int *, size_t, size_t);
void BUILD_MAX_HEAP(int *, size_t);
void EXCANGE(int& ,int&);


int main(int argc, char* argv[])
{
int arry[10] = {4, 1, 3, 2, 16, 9, 10, 14, 8, 7};
size_t sz = sizeof(arry) / sizeof(*arry);
HEAPSORT(arry, sz);
for (size_t i = 0; i != sz; ++i)
{
cout << arry[i]<<" ";
}
cout << endl;
return 0;
}

void HEAPSORT(int *arry, size_t sz)
{
BUILD_MAX_HEAP(arry, sz);
for(size_t i = sz - 1; i >= 1; --i)
{
EXCANGE(arry[0], arry[i]);
MAX_HEAPIFY(arry, 0, i - 1);
}
}

void BUILD_MAX_HEAP(int *arry, size_t sz)
{
for(int i = sz / 2 - 1; i >= 0; --i) //这里如果i是size_t的话,那么当i=0后,i--将是一个很大的正数,将导致无限循环!
{
MAX_HEAPIFY(arry, i, sz - 1);
}
}

void MAX_HEAPIFY(int *arry, size_t i, size_t sz)
{
size_t l, r, largest;
l = 2 * i + 1;
r = 2 * i + 2;
if(l <= sz - 1 && arry[l] > arry[i])
{
largest = l;
}
else
{
largest = i;
}
if (r <= sz - 1 && arry[r] > arry[largest])
{
largest = r;
}
if(largest != i)
{
EXCANGE(arry[i], arry[largest]);
MAX_HEAPIFY(arry, largest, sz - 1);
}
}

void EXCANGE(int &a, int &b)
{
int temp;
temp = a;
a = b;
b = temp;
}

最后的结果好像不对,你再看看!

就呆在云上 2008-11-19
  • 打赏
  • 举报
回复
恩可以了
#include <cstdlib>
#include <iostream>

using namespace std;

void HEAPSORT(int *, size_t);
void MAX_HEAPIFY(int *, size_t, size_t);
void BUILD_MAX_HEAP(int *, size_t);
void EXCANGE(int& ,int&);


int main(int argc, char* argv[])
{
int arry[10] = {4, 1, 3, 2, 16, 9, 10, 14, 8, 7};
size_t sz = sizeof(arry) / sizeof(*arry);
HEAPSORT(arry, sz);
for (size_t i = 0; i != sz; ++i)
{
cout << arry[i]<<" ";
}
cout << endl;
return 0;
}

void HEAPSORT(int *arry, size_t sz)
{
BUILD_MAX_HEAP(arry, sz);
for(size_t i = sz - 1; i >= 1; --i)
{
EXCANGE(arry[0], arry[i]);
MAX_HEAPIFY(arry, 0, i);
}
}

void BUILD_MAX_HEAP(int *arry, size_t sz)
{
for(int i = (sz - 1) / 2; i >= 0; --i) //modified
{
MAX_HEAPIFY(arry, i, sz);
}
}

void MAX_HEAPIFY(int *arry, size_t i, size_t sz)
{
size_t l, r, largest;
l = 2 * i + 1;
r = 2 * i + 2;
if(l <= sz - 1 && arry[l] > arry[i])
{
largest = l;
}
else
{
largest = i;
}
if (r <= sz - 1 && arry[r] > arry[largest])
{
largest = r;
}
if(largest != i)
{
EXCANGE(arry[i], arry[largest]);
MAX_HEAPIFY(arry, largest, sz);
}
}
void EXCANGE(int &a, int &b)
{
int temp;
temp = a;
a = b;
b = temp;
}
johnelf 2008-11-19
  • 打赏
  • 举报
回复
看看 mark 下
WingForce 2008-11-19
  • 打赏
  • 举报
回复
帮你改好了:

#include <cstdlib>
#include <iostream>

using namespace std;

void HEAPSORT(int *, size_t);
void MAX_HEAPIFY(int *, size_t, size_t);
void BUILD_MAX_HEAP(int *, size_t);
void EXCANGE(int& ,int&);


int main(int argc, char* argv[])
{
int arry[10] = {4, 1, 3, 2, 16, 9, 10, 14, 8, 7};
size_t sz = sizeof(arry) / sizeof(*arry);
HEAPSORT(arry, sz);
for (size_t i = 0; i != sz; ++i)
{
cout << arry[i]<<" ";
}
cout << endl;
system("PAUSE");
return 0;
}

void HEAPSORT(int *arry, size_t sz)
{
BUILD_MAX_HEAP(arry, sz);
for(size_t i = sz - 1; i >= 1; --i)
{
EXCANGE(arry[0], arry[i]);
MAX_HEAPIFY(arry, 0, i);
}
}

void BUILD_MAX_HEAP(int *arry, size_t sz)
{
for(int i = (sz - 1) / 2; i >= 0; --i) //modified
{
MAX_HEAPIFY(arry, i, sz);
}
}

void MAX_HEAPIFY(int *arry, size_t i, size_t sz)
{
size_t l, r, largest;
l = 2 * i + 1;
r = 2 * i + 2;
if(l <= sz - 1 && arry[l] > arry[i])
{
largest = l;
}
else
{
largest = i;
}
if (r <= sz - 1 && arry[r] > arry[largest])
{
largest = r;
}
if(largest != i)
{
EXCANGE(arry[i], arry[largest]);
MAX_HEAPIFY(arry, largest, sz);
}
}

void EXCANGE(int &a, int &b)
{
int temp;
temp = a;
a = b;
b = temp;
}

65,210

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧