考研算法第27天:直接插入排序 【插入排序】

插入排序算法介绍

 

老规矩我们来模拟一遍样例:

其思想简单来说就是将旧数组的每个数放入到新数组中

但是每次放入都要遵守下面的原则:如果前面有比当前数大的数便把它放到当前数的后面去。

过程如下面这张图

https://ts1.cn.mm.bing.net/th/id/R-C.1d23abd4251ef903852fa4e9a9a846b0?rik=SeEmFRaYSF5Yag&riu=http%3a%2f%2fpic.rmb.bdstatic.com%2f1d23abd4251ef903852fa4e9a9a846b06357.gif&ehk=yA2Sn0CnscZZhAedxo3%2f1xOt7tBjT7UZ73Ty9mmXyl4%3d&risl=&pid=ImgRaw&r=0https://ts1.cn.mm.bing.net/th/id/R-C.1d23abd4251ef903852fa4e9a9a846b0?rik=SeEmFRaYSF5Yag&riu=http%3A%2F%2Fpic.rmb.bdstatic.com%2F1d23abd4251ef903852fa4e9a9a846b06357.gif&ehk=yA2Sn0CnscZZhAedxo3%2F1xOt7tBjT7UZ73Ty9mmXyl4%3D&risl=&pid=ImgRaw&r=0

算法题目

考研算法第27天:直接插入排序 【插入排序】_第1张图片

算法代码:

#include 

using namespace std;

const int N = 1000010;
int q[N];
void insert_sort(int n){
    //遍历每个元素
     for(int i=1;ix ){
             q[j] = q[j-1];
             j--;
         }
         q[j] = x;
     }
    return;
}
int main(){
    int n;
    cin>>n;
    for(int i=0;i

算法空间和时间复杂度

空间复杂度:因为除了输入样例占得数组空间和一些变量就没有开辟其他空间所以等于O(常数+N)=O(N)。

时间复杂度:

最好:O(n=N),每次都不用换已经排序好了。

平均:O(N*N/2) = O(N^2) 

最差:两层循环: O(N^2) 

你可能感兴趣的:(算法,数据结构)