時空の複雑さ
時間の複雑さ
ソートの複雑さ
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;
}
};