目录
插入排序
时间复杂度:O(N^2)
空间复杂度:O(1)
稳定性:稳定
void InsertSort(int* arr, int size)
{
for (int i = 0; i < size - 1; i++)
{
int end = i;
int tmp = arr[end + 1];
while (end >= 0)
{
if (arr[end] > tmp)
arr[end + 1] = arr[end];
else
break;
end--;
}
arr[end + 1] = tmp;
}
}
希尔排序
时间复杂度:O(N * logN)
空间复杂度:O(1)
稳定性:不稳定
void ShellSort(int* arr, int size)
{
int gap = size;
while (gap > 1)
{
gap /= 2;
for (int i = 0; i < size - gap; i++)
{
int end = i;
int tmp = arr[end + gap];
while (end >= 0)
{
if (arr[end] > tmp)
arr[end + gap] = arr[end];
else
break;
end -= gap;
}
arr[end + gap] = tmp;
}
}
}
本文详细介绍了两种排序算法——插入排序和希尔排序的基本原理及实现方法。插入排序是一种简单直观的算法,通过不断地将未排序元素插入到已排序序列中来达到排序的目的;而希尔排序则是插入排序的一种更高效的改进版本,通过设定增量序列逐步缩小问题规模来减少比较次数,提高排序效率。
1492

被折叠的 条评论
为什么被折叠?



