1.直接插入排序
#include <stdio.h>
void InertSort(int* arr, int size)
{
int pos = 0;
for (int i = 1; i < size; i++)
{
int tmp = arr[i];
pos = i-1;
while (pos >= 0 && arr[pos] > tmp)
{
arr[pos + 1] = arr[pos];
pos--;
}
arr[pos + 1] = tmp;
}
}
2.希尔排序
希尔排序属于插入类排序,是将整个有序序列分割成若干小的子序列分别进行插入排序。
排序过程:先取一个正整数d1 < n,把所有序号相隔d1的数组元素放一组,组内进行直接插入排序;然后取d2 < d1,重复上述分组和排序操作;直至di=1,即所有记录放进一个组中排序为止。
void ShellSort(int* arr, int size)
{
int gap = size;
while (gap > 1)
{
gap = gap / 3 + 1;
int pos = 0;
for (int i = pos + gap ; i < size; i++)
{
int tmp = arr[i];
pos = i - gap;
while (pos >= 0 && arr[pos] > tmp)
{
arr[pos + gap] = arr[pos];
pos-=gap;
}
arr[pos + gap] = tmp;
}
}
}