排序算法之插入排序

原理

插入排序的思想和我们打扑克摸牌的时候一样,从牌堆里一张一张摸起来的牌都是乱序的,我们会把摸起来的牌插入到左手中合适的位置,让左手中的牌时刻保持一个有序的状态。

那如果我们不是从牌堆里摸牌,而是左手里面初始化就是一堆乱牌呢? 一样的道理,我们把牌往手的右边挪一挪,把手的左边空出一点位置来,然后在乱牌中抽一张出来,插入到左边,再抽一张出来,插入到左边,再抽一张,插入到左边,每次插入都插入到左边合适的位置,时刻保持左边的牌是有序的,直到右边的牌抽完,则排序完毕。

需要排序的元素分为两个区域:已排序区域未排序区域。开始时,未排序区域是空的,因此可以假设第一个元素已经是排序好的,后面的是未排序的,这样已排序区域就有一个元素了。过程是这样的:选择未排序元素中的第一个元素,与已排序的元素进行比较,通过比较将元素插入合适的位置。随着过程的继续,已排区域元素越来越多,未排区域元素越来越少。

代码实现

python3代码实现

def Insertion(Arr:list):
    for i in range(1,len(Arr)):
        value=Arr[i]
        for j in range(i - 1, -1, -1):
            if Arr[j] > value:
                Arr[j], Arr[j + 1] = Arr[j + 1], Arr[j]
            else:
                break
    return Arr

c#代码实现

public static void InsertionSort(int[] Arr)
{
	int num=Arr.Length;
	for(int i=0;i<num;i++)
	{
		int value=Arr[i];
		for(int j=i-1;j>=0,j--)
		{
			if(Arr[j]>value)
			{
				int temp=Arr[j];
				Arr[j]=Arr[j+1];
				Arr[j+1]=temp
			}
			else
			{
				break;
			}
		}
	}
}

以上代码亲测无误,如有不妥之处,敬请指正,谢谢!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值