时空复杂度
时间复杂度
排序复杂度
O ( n l o g n ) O(nlogn) O(nlogn)
建堆复杂度
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;
}
};