直接插入排序——算法系列

直接插入排序:

这个算法有一个非常直观的理解,像我们斗地主整牌的时候,进行的其实就是插入排序。

那么要注意的一点就是,这个和选择排序的区别,选择排序是在无序序列中选最小值,然后将此值和队首位置的值交换,遍历整个序列达到排序的目的;而插入排序,是遍历无序序列,顺序将每一个数插入到前面的有序序列中,遍历完成,则算法完成。

代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Diagnostics;
using System.Net;
using System.Threading;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            for (int i = 1; i <= 5; i++)
            {
                List<int> list = new List<int>();
                //插入2k个随机数到数组中
                for (int j = 0; j < 2000; j++)
                {
                    Thread.Sleep(1);
                    list.Add(new Random((int)DateTime.Now.Ticks).Next(0, 100000));
                }
                Console.WriteLine("\n第" + i + "次比较:");
                Stopwatch watch = new Stopwatch();
                watch.Start();
                var result = list.OrderBy(single => single).ToList();//这里这个single=>single不懂
                watch.Stop();
                Console.WriteLine("\n系统的快速排序耗费时间:" + watch.ElapsedMilliseconds);
                Console.WriteLine("输出前是十个数:"+string.Join(",",result.Take(10).ToList()));
                watch.Start();
                result = InsertSort(list);
                watch.Stop();
                Console.WriteLine("\n堆排序耗费时间:" + watch.ElapsedMilliseconds);
                Console.WriteLine("输出前是十个数:" + string.Join(",", result.Take(10).ToList()));
                
            }
            
            Console.ReadLine();
        }
        //插入排序算法
        static List<int> InsertSort(List<int> list)
        {
            for (int i = 1; i < list.Count; i++)
            {
                int temp = list[i];
                int j;
                for (j = i - 1; j >= 0 && temp < list[j]; j--)
                {
                    list[j + 1] = list[j];
                }
                list[j + 1] = temp;
            }
            return list;
        }
    }
}

总结:这个算法总是和选择排序混淆,其实思想上有一些不同。

原文地址:https://www.cnblogs.com/7ants/p/2956683.html