一、前言
数据结构与算法,顺便刷leetcode,无意间发现了一个 我觉得讲解的比较好的网页,并且会拿leetcode里面的题目当做例题,如有需要,奉上网址:五分钟学算法
二、算法思想
- 假设序列的第一个数是有序的,然后将第二个数插入进来,如果比第一个数小,则插入到第一个数前面。
- 类似重复上述步骤,将新插入进来的数都放在正确的位置,直到序列全部有序。
三、算法的图解(图片来源于网络)
四、算法的性质 - 算法的稳定性:该算法是从前往后遍历,相同元素的相对位置不会改变,因此,该算法为稳定排序。
- 空间复杂度:在原序列上的操作,因此为O(1)
- 算法的时间复杂度:双重嵌套循环,为O(n2)
五、代码
#include <iostream>
using namespace std;
void InsertSort(int* dps,int n)
{
int preindex=0;
int* current;
for(int i=1;i<n;i++)
{
int tmp=dps[i];
preindex=i-1;
for(;preindex>=0;preindex--)
if(tmp<dps[preindex])
dps[preindex+1]=dps[preindex];
else
break;
if(tmp!=dps[i])
dps[preindex]=tmp;
}
}
int main()
{
int num;
cout<<"请输入序列中元素的个数"<<endl;
cin>>num;
int dp[num];
for(int i=0;i<num;i++)
cin>>dp[i];
InsertSort(dp,num);
for(int i=0;i<num;i++)
cout<<dp[i]<<" ";
return 0;
}