极简堆排


void siftDown(vector& a, int i, int n) {
	int l=i*2, r=i*2+1, m=i;
	if(la[m]) m=l;
	if(ra[m]) m=r;
	if(m!=i) swap(a[i],a[m]), siftDown(a,m,n);
}
vector sortArray(vector& nums) {
	int n=nums.size();
	for(int i=n-1;i>=0;i--) siftDown(nums,i,n);
	for(int i=n-1;i>=0;i--) swap(nums[0],nums[i]), siftDown(nums,0,i);
	return nums;
}

相关