插入排序,时间复杂度:O(N^2),最好情况下为O(N),即原数组已经有序,空间复杂度为O(1)
插入排序的核心思想:每次插入时,将end位置及其之前的区间看作是有序的,然后将end后面那个数,插入到合适位置。
上代码:
void InsertSort_incline(int* arr, int n)
{
for (int i = 0; i < n - 1; i++)
{
//每次将end下标及之前的数组看作有序的
int end = i;
//将arr[end+1]这个数,往前面插入
int tmp = arr[end + 1];
while (end >= 0)
{
//如果arr[end] > tmp,就将arr[end]往后移动
//end往前走
if (arr[end] > tmp)
{
arr[end + 1] = arr[end];
end--;
}
//如果arr[end] < tmp,就说明tmp找到了应该插入的位置,结束循环
else
{
break;
}
}
//将tmp插入到end后面的那个位置
arr[end + 1] = tmp;
}
}
插入排序最重要的是:将前面的区间看作有序!!然后将后一个数插入。