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


    直接插入排序:

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

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

    代码:

    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;
            }
        }
    }

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

  • 相关阅读:
    EasyUI限制时间选择(开始时间小于结束时间)
    C# readonly与const的区别
    C# Lambda 表达式
    C# 扩展方法
    C# 枚举enum
    Visual Studio中的“build”、“rebuild”、“clean”的区别
    无root开热点教程
    数据库锁
    安卓:标题栏右上角添加按钮
    安卓:从assets目录下复制文件到指定目录
  • 原文地址:https://www.cnblogs.com/7ants/p/2956683.html
Copyright © 2020-2023  润新知