思路
插入排序
为了将数列排成升序,假设数组中某个元素之前的数列已经是升序了,那么从右往左遍历数组,将这元素插入到以及排好的数列之中即可,如此进行下去直到所有元素都插入到最终位置。这种方法耗时点在插入过程中需要不断移动数组,造成时间的浪费。
shell排序
Shell排序又称增量排序,是一种优化的插入排序。将数组按照gap=length/2的间隔进行分组,对每个组进行插入排序,这样可以使得在不用到大规模移动数组的前提下让大数尽量靠右,小数尽量靠左,所有组别排序完成后,让gap–并重复上诉分组并排序的过程,直到gap=1并完成排序后,整个数组排序完成。
代码
vector<int> ShellSort(vector<int> a)
{
int len = a.size();
for (int gap = len / 2; gap >= 1; gap--)
{
for (