[No000087]Linq排序,SortedList排序,二分法排序性能比较
2016-04-26 17:32
309 查看
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排序耗时:\t{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排序耗时:\t{0}毫秒", stopMatch.ElapsedMilliseconds.ToString()); stopMatch.Stop(); string[] arrTest = listOrder.ToArray(); stopMatch.Reset(); stopMatch.Start(); QuickSort(arrTest, 0, arrTest.Length - 1); stopMatch.Stop(); Console.WriteLine("二分法排序耗时:\t{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); } } } }
相关文章推荐
- 网络通信 --> IO多路复用之select、poll、epoll详解
- 代码重构[iOS开发]
- 【论文笔记】Text-Detection_简略版_201604
- ios使用友盟分享到QQ/微信时时如何判断手机上是否安装了QQ以及微信的客户端
- ubuntu12.04 安装 gcc-4.8
- poj2891 Strange Way to Express Integers(中国剩余定理)
- 数组易错点
- 如何在activity中隐藏导航栏
- Oracle使用存储过程分页
- java面试题剖析
- ACdream 113 The Arrow (概率DP)
- 笔试题39. LeetCode OJ (26)
- Firefox extension 开发之常用XPCOM service
- 作业6-学生成绩录入
- 单例模式的懒汉式和饿汉式实现分析
- RestSharp使用备忘
- 记住密码超简单实现(C#)
- centos7 开启防火墙端口 firewalld
- CArray排序
- oncreate()方法中获得view宽高 观察者模式