C++ はヒープ ソートを実装します

時空の複雑さ

時間の複雑さ

ソートの複雑さ

O ( nlogn ) O(nlogn)O ( nログn ) _ _

ヒープの複雑さ

O ( n ) O( n )O ( n )

空間の複雑さ

ヒープソートはインプレース設計のソート アルゴリズムであるため、必要なスペースは一定であるため、O(1) になります。

安定

不安定。

C++ コード (ビッグ ルート ヒープ)

class Solution {
    
    
public:
    void adjust(vector<int>&nums,int len,int index){
    
    
        int left=2*index+1;
        int right=2*index+2;
        int maxid=index;
        if(left<len&&nums[left]>nums[maxid]) maxid=left;
        if(right<len&&nums[right]>nums[maxid]) maxid=right;
        if(maxid!=index){
    
    
            swap(nums[maxid],nums[index]);
            adjust(nums,len,maxid);
        }
    }
    void HeapSort(vector<int>&nums,int size){
    
    
        for(int i=size/2-1;i>=0;i--){
    
    
            adjust(nums,size,i);
        }
        for(int i=size-1;i>=1;i--){
    
    
            swap(nums[0],nums[i]);
            adjust(nums,i,0);
        }
    }
    vector<int> sortArray(vector<int>& nums) {
    
    
       HeapSort(nums,nums.size());
        return nums;
    }
};

演算結果

ここに画像の説明を挿入

おすすめ

転載: blog.csdn.net/qaaaaaaz/article/details/130755131
おすすめ