插入排序 -
数列前面部分看为有序,依次将后面的无序数列元素插入到前面的有序数列中,初始状态有序数列仅有一个元素,即首元素。在将无序数列元素插入有序数列的过程中,采用了逆序遍历有序数列,相较于顺序遍历会稍显繁琐,但当数列本身已近排序状态效率会更高。
时间复杂度:O(N2) 稳定性:稳定
/*插入排序*/
void insertSort(vector<int> &arr, int bgn, int end)
{
for (int i = bgn + 1; i < end; ++i)
{
/*
* 分为1,2两部分处理,可以囊括j = beg - 1时的情况
* 即需要将arr[i]插入到首元素前的位置,若使用一个for
* 包括这两部分,则会在发生这种情况时退出
*/
/*1*/
int j = i - 1;
for ( ; j >= bgn; --j)
if (arr[j] <= arr[i])
break;
/*2*/
if (j != i - 1)
{
int temp = arr[i];
for (int k = i; k > j + 1; --k)
{
arr[k] = arr[k - 1];
}
arr[j + 1] = temp;
}
}
}
来源:CSDN
作者:卧_听风雨
链接:https://blog.csdn.net/birenxiaofeigg/article/details/103458611