插入排序

插入排序

时间复杂度:平均O(N^2)最坏O(N^2) 最好O(N)
空间复杂度:O(1)
稳定程度:稳定


原理
输入待排数组A[N]。
将A[0]元素视作初始有序区间,将A[1]->A[N-1]的元素依次插入该有序数组。
每次插入时,保证有序区间的有序性,将待插入元素A[i]依次与有序区间中的A[i-1],A[i-2]…直至A[k]比较,其中A[k]是一个小于A[i]的元素,将A[i]插入A[k+1]的位置,其余元素依次右移。
直至无序区间所有元素插入完毕,排序完成。

评价:
插入排序是基本排序方法中的一种,其时间复杂度较高,空间复杂度仅为O(1)。在面对基本有序的待排数组时,插入排序的性能非常好,可以非常接近O(N),这是由于其每趟交换的次数很少。

代码:

int* insertionSort(int* A, int n) {
    int i,j,tmp;
    for(i=1;i<n;i++){
        tmp = A[i];
        for(j=i;j>0 && A[j-1]>tmp;j--) {
            A[j] = A[j-1];
        }
        A[j] = tmp;
    }
    return A;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值