直接插入排序
当出入第i个元素的时候,前面的a[0], a[1]...a[i - 1]已经排好序了,此时用a[i]的排序码与之前的排序码顺序进行比较,好到适合插位置将array[i]插入,如下图:
实现代码如下:
void InsertSort(int* a, int n)
{
for (int i = 0; i < n - 1; i++)
{
int cur = i + 1;//标记i的下一个数的下标
while (cur)
{
if (a[cur - 1] > a[cur])//如果前一个数大于后一个数,交换两个数。
{
swap(a[cur - 1], a[cur]);
cur--;//依次往后比
}
else
break;
}
}
}
代码样例:
int main()
{
int a[] = { 5, 2, 4, 6, 1, 3 };
int n = sizeof(a) / sizeof(a[0]);
InsertSort(a, n);
for (auto e : a)
{
cout << e << " ";
}
system("pause");
return 0;
}
运行代码:
特性总结:
1.元素越接近有序,运算时间越短。
2.时间复杂度O(n²)
3.空间复杂度O(1)
4.稳定性:稳定