描述:直接插入排序的基本操作是将一个数插入到已经排序好的有序表中,从而得到一个新的、记录数增1的有序表。插入排序与选择排序还是比较相似的,不同的是,这个排序不是从右半部分选择最小的,而是直接选择右边第一个数据,除此之外,还有一点不同的是,选择排序左半部分不用去排序,只需找到右边最小元素最后交换即可有序,而插入排序则不同,它每次都要比较,直到找到合适位置。
图解:
代码实现:
int InsertSort(int *ar,int n)
{
assert(ar != NULL);
if (ar == NULL)
{
return 0;
}
int tmp;
int j;
for (int i = 1; i < n; i++)
{
tmp = ar[i];
for (j = i - 1; j >= 0; j--)
{
if (ar[j] > tmp)
{
ar[j + 1] = ar[j];
}
else
{
break;
}
}
ar[j+1] = tmp;
}
}
时间复杂度:O(n^2) 空间复杂度O(1) 稳定性:稳定