插入排序如下
void InsertSort(vector<int>& a)
{
for (int i = 1; i < a.size(); i++)
{
int index = i;
while (index)
{
if (a[index - 1] > a[index])
{
swap(a[index - 1], a[index]);
index--;
}
else {
break;
}
}
}
}
希尔排序是在插入排序地基础上实现的,我们知道插入排序在整体基本有序的情况下效率很高
那我们能不能先让待排序的数先整体有序呢?
这就是希尔排序所做到的了。
希尔排序如下
void ShellSort(vector<int>& a)
{
int gap = a.size();
while (gap > 1)
{
gap /= 2;
// 因为数组为空或是1都不影响
for (int i = gap; i < a.size() - gap + 1; i++)
{
int index = i;
while ((index - gap) >= 0)
{
if (a[index - gap] > a[index])
{
swap(a[index - gap], a[index]);
index -= gap;
}
else break;
}
}
}
}