堆排序

void heapify(vector<int> &arr, int n, int i) {
    int largest = i;
    int lson = 2 * i + 1;
    int rson = 2 * i +2;

    if (lson < n && arr[lson] > arr[largest]) {
        largest = lson;
    }
    if (rson < n && arr[rson] > arr[largest]) {
        largest = rson;
    }
    if (largest != i) {
        swap(&arr[largest], &arr[i]);
        heapify(arr, n, largest);
    }
}

void heapSort(vector<int> &arr) {
    int i;
    for (i = arr.size() / 2 - 1; i>=0; i--) {
        heapify(arr, arr.size(), i);
    }
    for (i = arr.size() - 1; i > 0; i--) {
        swap(&arr[0], &arr[i]);
        heapify(arr, i, 0);
    }
}

 

posted @ 2022-03-22 18:52  ainingxiaoguai  阅读(33)  评论(0)    收藏  举报