排序算法(二)插入排序和希尔排序

本文详细介绍了两种常见的排序算法——插入排序和希尔排序。对于插入排序,文章通过代码解释了其工作原理,即通过比较将未排序元素插入到已排序区的正确位置。希尔排序则在插入排序基础上引入步长概念,提高了大规模数据的排序效率。提供了完整的C#代码实现,便于理解和应用。


一、插入排序

1.原理与分析

先看图:
图片来自百度
插入排序是将序列分为排序区和未排序区,将未排序区的数值依次从后往前与排序区数值进行比较,选择到合适的位置插入。

2.代码实现(C#)

public static void InsertSort(int[] array)
{
	//未排序区索引
	int index;
	//记录待插入的值
	int temp;
    for(index = 1; index < array.Length; index++)
    {
    	int insertPos = index - 1;
    	temp = array[index];
    	while(insertPos >= 0 && array[insertPos] > temp)
    	{
    		array[insertPos + 1] = array[insertPos];
    		insertPos--;
    	}
    	array[insertPos + 1] = temp;
    }
}

二、希尔排序

1.原理与分析

先看图:
图片来自百度

希尔排序是对插入排序的一种优化,在插入排序的基础上加了步长的概念,在面对较大数据量时,能有效提高插入排序的效率。

2.代码实现(C#)

public static void ShellSort(int[] array)
{
	int step = array.Length / 2;
    int index;
    int temp;

    while (step >= 1)
    {
    	for (index = step; index < array.Length; index++)
        {
        	temp = array[index];
            int insertPos = index - step;

            while (insertPos >= 0 && array[insertPos] > temp)
            {
            	array[insertPos + step] = array[insertPos];
                insertPos -= step;
            }

            array[insertPos + step] = temp;
        }

        step /= 2;
     }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值