插入排序
void insert_sort(vector<int>& arr)
{
for (int i = 1; i < arr.size(); i++)
{
int currVal = arr[i];
int j = i - 1;
for (; j >= 0 && currVal < arr[j]; j--)
{
arr[j + 1] = arr[j];
}
arr[j + 1] = currVal;
}
}
归并排序
void merge(vector<int>& arr, int lo, int mid, int hi)
{
vector<int> tmp;
int j = lo, k = mid + 1;
for (int i = lo; i <= hi; i++)
{
if (j > mid)
{
while (k <= hi)
{
tmp << arr[k++];
}
break;
}
else if (k > hi)
{
while (j <= mid)
{
tmp << arr[j++];
}
break;
}
else if (arr[j] > arr[k])
{
tmp << arr[k++];
}
else
{
tmp << arr[j++];
}
}
QString str;
int index = 0;
for (int i = lo; i <= hi; i++)
{
arr[i] = tmp[index++];
str += QString::number(arr[i]); str += ", ";
}
LOG_INFO << "MERGE " << lo << ", " << hi << "| " << str.toStdString();
}
void merge_sort(vector<int>& arr, int lo, int hi)
{
if (hi - lo < 1)
{
return;
}
else if (hi - lo == 1)
{
if (arr[lo] > arr[hi])
{
int tmp = arr[lo];
arr[lo] = arr[hi];
arr[hi] = tmp;
}
return;
}
int mid = (lo + hi) / 2;
if (mid - lo >= 1)
{
LOG_INFO << "LOW " << lo << ", " << mid;
merge_sort(arr, lo, mid);
}
if (hi - mid - 1 >= 1)
{
LOG_INFO << "HI " << mid + 1 << ", " << hi;
merge_sort(arr, mid + 1, hi);
}
merge(arr, lo, mid, hi);
}
快速排序
void quick_sort(vector<int>& arr, int lo, int hi)
{
if (lo > hi) return;
int tmp = arr[lo];
int i = lo, j = hi;
while (i != j)
{
while (i < j && arr[j] >= tmp)
j--;
while (i < j && arr[i] <= tmp)
i++;
if (i < j)
{
int var = arr[i]; arr[i] = arr[j]; arr[j] = var;
}
}
arr[lo] = arr[i];
arr[i] = tmp;
quick_sort(arr, lo, i-1);
quick_sort(arr, i + 1, hi);
}