给你一个整数数组 nums
,请你将该数组升序排列。
这道题排序本身不难,但是由于测试用例给的十分奇葩,导致很多排序超出时间限制,经过我的测试,发现堆排能过,下面是代码:
void swap(int* x, int* y)
{
int tmp = *x;
*x = *y;
*y = tmp;
}
void Adjustdown(int*a, int n, int size)
{
int child = n*2 + 1;
while (child < size)
{
if (child + 1 < size && a[child + 1] > a[child])
{
child = child + 1;
}
if (a[n] < a[child])
{
swap(&a[n], &a[child]);
n = child;
child = n*2 + 1;
}
else
{
break;
}
}
}
void HeapSort(int* a, int n)
{
for (int i = (n - 2)/2; i >= 0; i--)
{
Adjustdown(a, i, n);
}
for (int i = n - 1; i > 0; i--)
{
swap(&a[i], &a[0]);
Adjustdown(a, 0, i);
}
}
int* sortArray(int* nums, int numsSize, int* returnSize)
{
HeapSort(nums, numsSize);
*returnSize = numsSize;
return nums;
}