• [No000087]Linq排序,SortedList排序,二分法排序性能比较


    using System;
    using System.Collections;
    using System.Collections.Generic;
    using System.Diagnostics;
    using System.Linq;
    
    namespace ConsoleTest
    {
    
        class Program
        {
            static void Main(string[] args)
            {
    
                List<string> listTest = new List<string>();
                for (int i = 1; i <= 500000; i++)//50_0000
                {
                    listTest.Add(i.ToString().PadLeft(10, '0'));
                }
    
                Stopwatch stopMatch = new Stopwatch();
                stopMatch.Start();
                List<string> listOrder = listTest.OrderByDescending(c => c).ToList<string>();
                stopMatch.Stop();
    
                Console.WriteLine("Linq排序耗时:	{0}毫秒", stopMatch.ElapsedMilliseconds.ToString());
    
                stopMatch.Reset();
    
                stopMatch.Start();
    
                var sortedList = new System.Collections.Generic.SortedList<string, string>();
                foreach (var item in listTest)
                {
                    sortedList.Add(item,item);
                }
                Console.WriteLine("SortedList排序耗时:	{0}毫秒", stopMatch.ElapsedMilliseconds.ToString());
                stopMatch.Stop();
    
                string[] arrTest = listOrder.ToArray();
    
                stopMatch.Reset();
                stopMatch.Start();
                QuickSort(arrTest, 0, arrTest.Length - 1);
    
                stopMatch.Stop();
    
                Console.WriteLine("二分法排序耗时:	{0}毫秒", stopMatch.ElapsedMilliseconds.ToString());
    
    
                Console.Read();
    
    
            }
    
    
    
            /// <summary>
            /// 二分法从小到大排序
            /// </summary>
            /// <param name="array">需要排序的字符串数组</param>
            /// <param name="start">排序元素的起始下标</param>
            /// <param name="end">排序元素的结止下标</param>       
            public static void QuickSort(string[] array, int start, int end)
            {
    
                //有可能造成start>end   因为递归调用时j+1,可能引起j比end还大1。 另外如果数组是空的,或者输入错误也会出现这种情况
                if (end <= start)
                {
                    return;
                }
                else
                {
    
                    //取中间元素为中心点,然后移到最右边
                    int sign = (start + end) / 2;
                    string tmp = array[end];
                    array[end] = array[sign];
                    array[sign] = tmp;
                    int j = start;
    
                    for (int i = start; i <= end - 1; i++)
                    {
    
                        //小于的元素和标记互换,等于的不能互换,否则会形成死循环                   
                        if (array[i].CompareTo(array[end]) == -1)
                        {
    
                            tmp = array[i];
                            array[i] = array[j];
                            array[j] = tmp;
                            j = j + 1;
    
                        }
    
                    }
    
                    //把标记元素和第一个>=它的元素位置互换,这样数组就分成2个部分,一个部分比中心值小,一个部分比中心值大。
                    tmp = array[j];
                    array[j] = array[end];
                    array[end] = tmp;
                    QuickSort(array, start, j);
                    QuickSort(array, j + 1, end);
                }
    
            }
    
    
        }
    }
  • 相关阅读:
    常用Dos 命令
    Expect: 100continue
    Sql Server 文件和文件组体系结构
    Build Action
    regasm.exe 程序集注册工具
    获得user account的SID,GUID
    sp_change_users_login
    Regsvr32
    ASP.NET IIS 注册工具 (Aspnet_regiis.exe)
    随机生成300道四则运算
  • 原文地址:https://www.cnblogs.com/Chary/p/No000087.html
Copyright © 2020-2023  润新知