65,210
社区成员
发帖
与我相关
我的任务
分享
#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;
}
最后的结果好像不对,你再看看!
#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;
}
#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;
}