您的位置:首页 > 其它

HeapSort

2013-10-22 11:19 309 查看
void HeapAdjust(int a[], int n, int i) {
int l = 2*i + 1;
int r = l + 1;
int largest = i;

if (l < n && a[l] > a[i]) {
largest = l;
}

if (r < n && a[r] > a[largest]) {
largest = r;
}

if (largest != i) {
int t = a[largest];
a[largest] = a[i];
a[i] = t;
HeapAdjust(a, n, largest);
}
}

void HeapBuild(int a[], int n) {
for (int i = n/2 - 1; i >= 0; i--) {
HeapAdjust(a, n, i);
}
}

void HeapSort(int a[], int n) {
HeapBuild(a, n);

for (int i = (n-1); i > 0; i--) {
int t = a[i];
a[i] = a[0];
a[0] = t;
HeapAdjust(a, i, 0);
}
}

void Test(void) {
int a[5] = {1, 9, 2, 4, 3};
HeapSort(a, 5);
for (int i = 0; i < 5; i++) {
printf("%d ", a[i]);
}
printf("\n");
system("pause");
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: