提交记录 18674
提交时间 |
评测时间 |
2022-11-20 17:58:13 |
2022-11-20 17:58:21 |
void quick_sort(unsigned int a[], int first, int last)
{
int i, j;
unsigned int t;
if(last - first <= 40)
{
for(i = first + 1; i <= last; i++)
{
t = a[i];
for(j = i - 1; j >= first && t < a[j]; j--)
a[j + 1] = a[j];
a[j + 1] = t;
}
return;
}
t = a[first]; //第一个元素与中间元素交换
a[first] = a[first + last >> 1];
a[first + last >> 1] = t;
unsigned int stdd = a[first];
i = first + 1;
j = last;
for(;;)
{
while(i <= last && a[i] < stdd)
i++;
while(j > first && a[j] > stdd)
j--;
if(i > j)
break;
#if 1 //测试证明,这种写法比另一种效率高
t = a[i];
a[i++] = a[j];
a[j--] = t;
#elif 1
t = a[i];
a[i] = a[j];
a[j] = t;
i++;
j--;
#endif
} //把数组分成>=stdd和<=stdd两部分。即便两个元素相等,也要进行交换。
/**
* 把a[i] < stdd、a[j] > stdd改成a[i] <= stdd、a[j] >= stdd虽然正确,
* 但是当元素全都相同时,会引起两边的元素数量极其不平衡,使得递归深度增加、耗时增加。
*/
a[first] = a[j];
a[j] = stdd;
quick_sort(a, first, j - 1);
quick_sort(a, j + 1, last);
}
void sort(unsigned *a, int n) {
quick_sort(a, 0, n - 1);
}
Compilation | N/A | N/A | Compile OK | Score: N/A | 显示更多 |
Testcase #1 | 5 s | 381 MB + 492 KB | Time Limit Exceeded | Score: 0 | 显示更多 |
Judge Duck Online | 评测鸭在线
Server Time: 2024-04-23 14:37:51 | Loaded in 1 ms | Server Status
个人娱乐项目,仅供学习交流使用