1.题目:

2.我的代码:
C语言:
/**
* Note: The returned array must be malloced, assume caller calls free().
*/
int* sortArray(int* nums, int numsSize, int* returnSize)
{
//希尔排序
int gap = numsSize;
//多次预排
while (gap > 1)
{
//确保最后一次gap是1
//gap = gap / 3 + 1;
gap = gap / 2;
//一锅炖,一步到位
for (int i = 0; i < numsSize - gap; i++)
{
int end = i;
int x = nums[end + gap];
while (end >= 0)
{
if (x < nums[end])
{
nums[end + gap] = nums[end];
end -= gap;
}
else
{
break;
}
}
nums[end + gap] = x;
}
}
*returnSize = numsSize;
return nums;
}
Java:
3.答案代码:
C语言:
/*
此题对于时间效率要求较高,像插入排序,选择排序,冒泡排序都是O(n^2)的时间复杂度,所以这三种排序都跑不过。
*/
int* sortArray(int* nums, int numsSize, int* returnSize){
//插入排序, 此题如果用插入排序,时间复杂度过高,会导致TLE
InsertSort(nums, numsSize);
//希尔
ShellSort(nums, numsSize);
//选择,会超出时间限制
SelectSort(nums, numsSize);
//冒泡排序, 也会超出时间限制
BubbleSort(nums, numsSize);
//快排
QuickSort(nums, 0, numsSize - 1);
//归并
MergeSort(nums, numsSize);
//计数
CountSort(nums, numsSize);
*returnSize = numsSize;
return nums;
}
Java:


















