算法课不允许用算法库和容器,自己写了一个,昨天交学校oj一直有一个点死循环(以前用这个都没问题),换std::sort就过了
这个快排能过洛谷,不知道是哪里出错了,希望能指出其中的错误。
template <typename T>
void sort(T* start, T* end)
{
if (start >= end - 1) return;
int mid = (end - start)/2;
T pivot = *(start + mid);
std::swap(*(start + mid), *(start));
T *i = start, *j = end - 1;
while (i < j)
{
while (pivot < *j) j--;
if (i < j) *i++ = *j;
while (*i < pivot && i < j) i++;
if (i < j) *j-- = *i;
}
*i = pivot;
sort(start, i);
sort(i + 1, end);
}