/* 快排改進算法 快排+插入,當集合較小時,不再排序,由於已經通過快排,保證基本有序,移動次數不會太多,此時改用插入排序, */
static void quickSortSection(std::vector<int>& vec, int start, int end, int k)
{
if ((end - start) > k)
{
if (start >= end)
{
return;
}
int i = start;
int j = end;
int flag = vec[i];
while(i < j)
{
for (; j > i; j--)
{
if (vec[j] < flag)
{
vec[i] = vec[j];
break;
}
}
for (; i < j; i++)
{
if (vec[i] >= flag)
{
vec[j] = vec[i];
break;
}
}
}
vec[j] = flag;
quickSortSection(vec, j + 1, end, k);
quickSortSection(vec, start, j - 1, k);
}
}
static void quickSortImprove(std::vector<int>& vec)
{
if (vec.empty())
{
return;
}
quickSortSection(vec, 0, vec.size() - 1, 3);
for (int i = 1; i < vec.size(); i++)
{
int flag = vec[i];
int j = i - 1;
for (; j >= 0; j--)
{
if (vec[j] > flag)
{
vec[j+1] = vec[j];
}
else
{
break;
}
}
vec[j+1] = flag;
}
}