精典排序算法-插入排序

插入排序:

问题:给定一个无序数组,要求进行排序(从小到大)

思路:1.首先先将数组分为两种一种是有序区一种是无序区,每次从无序区取出一个元素,插入到有序区适当位置

           2.取出的无序区元素与有序区的最后一个元素比较

             如果这个元素小于有序区元素那么有序区元素向后移一位,并且继续向前遍历有序区元素,arr[j+1]=arr[j];

             如果出现这个元素大于有序区元素那么这个元素放在有序区元素后一位vec[j+1]=tmp;"这里的tmp指的是无序区取出的元素",

             如果遇到有序区元素遍历越界了那么将这个元素放在有序区首位

          3.开始时有序区是一个数即数组第一个数,无序区则是剩余n-1个数,每遍历一次,有序区元素个数增加一个,无序区元素减少一个重复n-1次,完成排序


主要代码如下(C++):


void straightSort(vector<int> &vec,int len)
{
    int temp;//无序区第一个元素
    for(int i=1;i<len;i++)
    {
        temp=vec[i];
        for(int j=i-1;j>=0 && vec[j]>temp;j--)
        {    
            vec[j+1]=vec[j];//有序区元素后移一位
        }
            vec[j+1]=temp;
    }
}

空间复杂度:O(1)

时间复杂度:

1.平均O(N^2)//两次for循环

2.最优O(N)

3.最差O(N^2)//两次for循环

稳定性:稳定

原因:相等的两个元素,排序后,相对位置不会出现变化。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值