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: