插入排序算法基本思想:将数组分为两部分,前一部分为已经排好顺序的部分,后一部分为数组无序部分,依次将无序部分的元素插入有序部分的合适位置,直至无序部分为空,排序完成。
与冒泡排序相对比:
1.在冒泡排序中,经过每一轮的排序处理后,数组的后一部分是有序的,前一部分是无序的;
2.在插入排序中,经过每一轮的排序处理后,数组的前一部分是有序的,后一部分是无序的;
C++实现代码如下:
算法空间复杂度0(1),时间复杂度0(n^2)
#include "pch.h"
#include <iostream>
#include <vector>
using namespace std;
vector<int> InsertSort(vector<int> v1);
int main()
{
vector<int> aaa = { 9,4,6,1,5,3,2 };
vector<int> bbb = InsertSort(aaa);
for (int i = 0; i < bbb.size(); i++)
{
cout << bbb[i] << " ";
}
return 0;
}
vector<int> InsertSort(vector<int> v1)
{
if (v1.size() < 2)
{
return v1;
}
for (int i = 1; i < v1.size(); i++)//数组无序部分
{
for (int j = i; j > 0; j--)//数组有序部分,两部分数组公共部分v1[i]
{
if (v1[j] < v1[j - 1])
{
int temp = v1[j];
v1[j] = v1[j - 1];
v1[j - 1] = temp;
}
}
}
return v1;
}