c++ 堆排序

堆排序主要分为两个函数:
1、构建堆
2、元素调整

#include <iostream>
using namespace std;



void maxHeap(int tree[], int n, int i) {
	if (i >= n) 
		return;

	int lchild = i*2 + 1;
	int rchild = i*2 + 2;
	int max = i;

	if (lchild < n && tree[lchild] > tree[max]) {
		max = lchild;
	}

	if (rchild < n && tree[rchild] > tree[max]) {
		max = rchild;
	}

	if (max != i) {
		swap(tree[max], tree[i]);
		maxHeap(tree, n, max);
	}
}

void buildHeap(int tree[], int n) {
	if (n < 2) 
		return;

	int lastNode = n - 1;
	int lastParent = lastNode - 1 / 2;
	while (lastParent--) {
		maxHeap(tree, n, lastParent);
	}
}

void heapSort(int tree[], int n) {
    if (n < 2) 
		return;
    std::cout << "start build heap" << std::endl;
    buildHeap(tree, n);
	std::cout << "build heap succ" << std::endl;

    for (int i = n-1; i >= 0; i--) {
        swap(tree[0], tree[i]);
        maxHeap(tree, i, 0);
    }
	std::cout << "heap sort succ" << std::endl;
}

int main() {
    int tree[5] = {3, 5, 1, 9, 2};
    heapSort(tree, 5);

    for (int i=0; i < 5; i++) {
        std::cout << tree[i] << std::endl;
    }
    return 0;
}
posted @ 2023-09-02 20:26  小海哥哥de  阅读(5)  评论(0编辑  收藏  举报