您的位置:首页 > 其它

排序算法:推排序

2016-09-12 15:18 204 查看
#include<iostream>

using namespace std;

void AdjustHeap(int A[], int hLen, int i)
{
int left = 2*i + 1;
int right = 2*i + 2;
int largest = i;
int temp;

while(left < hLen || right < hLen)
{
if (left < hLen && A[largest] < A[left])
{
largest = left;
}

if (right < hLen && A[largest] < A[right])
{
largest = right;
}

if (i != largest)
{
temp = A[largest];
A[largest] = A[i];
A[i] = temp;

i = largest;
left = 2*i + 1;
right = 2*i + 2;
}
else
{
break;
}

}
}

void BuildHeap(int A[], int hLen)
{
int i;
int begin = hLen/2 - 1;
for (i = begin; i >= 0; i--)
{
AdjustHeap(A, hLen, i);
}
}

void HeapSort(int A[], int aLen)
{
int hLen = aLen;
int temp;

BuildHeap(A, hLen);

while (hLen >= 1)
{
temp = A[hLen-1];
A[hLen-1] = A[0];
cout << A[0] << ' ';
A[0] = temp;
hLen--;
AdjustHeap(A, hLen, 0);
}
}

int main()
{
int A[10]={1, 3, 4, 5, 7, 2, 6, 8, 0};
HeapSort(A, 9);
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: