1. 基本思想
插入排序的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。插入排序在实现上,通常采用in-place排序(即只需用到O(1)的额外空间的排序),因而在从后向前扫描过程中,需要反复把已排序元素逐步向后挪位,为最新元素提供插入空间。
2.代码实现
void insterSort(vector<int> &arr,int n)
{
//把[0,end]当成是有序的 插入tmp依旧有序
for (int i = 1; i < n; i++)
{
int end = i-1;
int tmp = arr[i];
while (end >= 0)
{
if (arr[end] > tmp)//如果要插入的数比前面有序数组最大数的小
{
arr[end + 1]=arr[end]; //把有序数组最后一位往后挪一位(就是tmp原来的位置)
--end;
}
else
{
break;
}
}
arr[end+1] = tmp;
}
}