void Make_heap(vector <int> &arr) {
    
    for(int i = 1; i <= (arr.size() >> 1); ++i) {
        
        int now = i;
        int left = (now << 1), right = (now << 1) + 1;
        
        while(left <= arr.size() && arr[now - 1] > arr[left - 1]) {
            
            swap(&arr[now - 1], &arr[left - 1]);
            
            now <<= 1;
            left <<= 1;
        }
        
        now = 1;
        
        while(right <= arr.size() && arr[now - 1] > arr[right - 1]) {
            
            swap(&arr[now - 1], &arr[right - 1]);
            
            now = (now << 1) + 1;
            right = (now << 1) + 1;
        }
    }
    
    return;
}

这个函数只是构建小根堆 并不是堆排序 别误会了

1 comments

  • 1