LeetCode基础-排序-插入排序

插入排序的思路是这样的:
像整理扑克牌那样,一张张来,将每一张插入到已经有序的牌中,这样会导致每个排在这张牌右边的元素都向右移动一个位置。

对于大数组,且其中部分元素已经有序进行排序,比随机顺序的数组要快得多。

代码如下:

public void InsertSort(int[] a)
{
    //升序排列
    for(int i = 1; i < a.Length; i++)
    {
        //将a[i]插入到a[i-1], a[i-2], a[i-3]...之中
        for(int j = i; j > 0 && a[j] < a[j-1]; j++)
        {
            exchange(a[j], a[j-1]);
        }
    }
}

对于0到Length中的每个i,将 a[i] 与 0 到 a[i-1] 中比它小的所有元素依次交换。i 从左向右的过程,左边始终有序,则 i 到达最右端时排序就完成了。

要大幅提高插入排序的速度,需要在内循环中将较大的元素都向右移动,而不是总交换两个元素(访问数组的次数就能减半)。

这里写图片描述

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值