zoukankan      html  css  js  c++  java
  • 直接插入排序——算法系列

    直接插入排序:

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

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

    代码:

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

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

  • 相关阅读:
    HDU 1509 Windows Message Queue
    sql批量更换dedecms文章来源和作者
    dedecms织梦网站时间标签strftime和MyDate解析
    JS代码站原创DEDECMS教程插件系列
    DEDECMS织梦自定义表单中必填项、电话邮箱过滤以及验证码规则
    dedecms标签(tags)页面伪静态设置
    dedecms几个小技巧
    dedecms 5.7 网站搬家后产生的问题记录
    dedecms织梦做中英文(多语言)网站步骤详解
    DedeCMS系统设置说明:站点设置
  • 原文地址:https://www.cnblogs.com/7ants/p/2956683.html
Copyright © 2011-2022 走看看