直接插入排序:
当插入第i(i>=1)个元素时,前面的src[0],src[[1],…,src[i-1]已经排好序,此时用src[i]的排序码与
src[i-1],src[i-2],…的排序码顺序进行比较,找到插入位置即将src[i]插入,原来位置上的元素顺序后移
void InsertSort(int *src, int n) //直接插入 空间复杂度为 n^2.
{
int i, j;
int tmp;
for (i = 1; i < n; i++)
{
tmp = src[i];
for (j = i; j>0 && src[j - 1] > tmp ; j--)
{
src[j] = src[j - 1];
}
src[j] = tmp;
}
}
希尔排序:
先选定一个整数,把待排序文件中所有记录分成个 组,所有距离为的记录分在同一组内,并对每一组内的记录进行排序。然后,取,重复上述分组和排序的工作。当到达=1时,所有记录在统一组内排好序。
void ShellSort(int *src,int n) //希尔排序 数组越有序,直接插入排序越块
{
int i, j, k;
int gap;
int tmp;
for (gap = n / 2; gap; gap /= 2)
{
for (k = 0; k < gap; k++)
{
for (i = gap + k; i < n; i += gap)
{
tmp = src[i];
for (j = i; j >= gap && src[j - gap] > tmp; j -= gap)
{
src[j] = src[j - gap];
}
src[j] = tmp;
}
}
}
}