插入排序法

插入排序法


          插入排序法:所谓插入排序法乃是将一个数目插入该占据的位置。


          假设:我们输入的是 “5,1,4,2,3”。

          我们从第二个数字开始,这个数字是1,我们的任务只要看看1有没有正确的位置,我们的做法是和这个数字左边的数字来比,因此我们比较1和5,1比5小,所以我们就交换1和5,原来的排列就变成了“1,5,4,2,3”

          接下来,我们看第3个数字有没有在正确的位置。这个数字是4,它的左边数字是5,4比5小,所以我们将4和5交换,排列变成了 “1,4,5,2,3"我们必须继续看4有没有在正确的位置,4的左边是1,1比4小,4就维持不动了。

          再来看第四个数字,这个数字是2,我们将2和它左边的数字相比,都比2大,所以就将2一路往左移动,一直移到2的左边是1,这时候排序变成了 “1,2,4,5,3”

          最后,我们检查第五个数字,这个数字是3,3必须往左移,一直移到3的左边是2为止,所以我们的排列就变成了 “1,2,3,4,5”排序因此完成了。

所谓插入排序法,就是检查第i个数字,如果在它的左边的数字比它大,进行交换,这个动作一直继续下去,直到这个数字的左边数字比它还要小,就可以停止了。插入排序法主要的回圈有两个变数:i和j,每一次执行这个回圈,就会将第i个数字放到左边恰当的位置去。

          这里使用C#实现了一下,具体代码如下:


<span style="font-size:24px;">namespace ConsoleApplication1
{
    class Program
    {
        //定义一个泛型集合
        //要求从大到小排序
        static List<int> list = new List<int>() { 72, 54, 59, 30, 31, 78, 2, 77, 82, 9 };
        static void Main(string[] args)
        {
            bubble();
        }
        //排序
        static void bubble()
        {
            //总共要比较的趟数
            for (int i = 1; i < list.Count; i++)
            {
                //定义一个变量
                //用于存放位置为i的那个元素,即寻找合适位置的那个元素
                int temp = list[i];
                //从这个数的位置开始,依次和它的前一个数进行比较
                int j = i;
                //每趟中要比较的次数
                //依次比较当前位置为j-1的数和temp的大小
                //如果当前位置为(j-1)的数比temp小,则把它移到位置为j的地方,然后j-1
                //判断j是否大于0
                //如果j大于0,继续比较
                //如果j小于0,结束比较
                //如果当前位置为(j-1)的数比temp大,结束比较            
                while ((j > 0) && (list[j - 1] < temp))
                {
                    list[j] = list[j - 1];
                    --j;
                }
                //temp,应该放到位置为j的地方
                list[j] = temp;
                PrintList();
            }
            Console.ReadKey(); 
        }
        //输出
        static void PrintList()
        {
            foreach (var item in list )
            {
                Console.Write(string.Format("{0} ", item));
            }
            Console.WriteLine();          
        }       
    }
}
</span>


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值