C#中常见排序方法
来源:互联网 发布:百度云总是网络不给力 编辑:程序博客网 时间:2024/05/29 17:36
C#中常见排序方法
快速排序、堆排序、C#的list自带Sort方法排序、Linq、List自带OrderBy排序
快速排序
快排代码。1000万int数据,大约3-4秒。在Unity中大概1-2秒,奇怪。
void QuickSort<T>(T[] a, int l, int r) where T : IComparable{ if (l < r) { int i = l, j = r; T pivot = a[i]; while (i < j) { while (i < j && a[j].CompareTo(pivot) > 0) j--; if (i < j) a[i++] = a[j]; while (i < j && a[i].CompareTo(pivot) < 0) i++; if (i < j) a[j--] = a[i]; } a[i] = pivot; QuickSort<T>(a, l, i - 1); QuickSort<T>(a, i + 1, r); }}
堆排序
堆排代码。1000万 int 数据大约11秒
/// <summary>/// 堆排序/// </summary>/// <typeparam name="T"></typeparam>/// <param name="a"></param>/// <param name="size">对大小(节点数)</param>void HeapSort<T>(T[] a, int size) where T : IComparable{ /// 初始化堆 for (int i = size / 2 -1; i >= 0; i--) { AdjustHeap<T>(a, i, size); } for (int i = size - 1; i >= 0; i--) { T tmp = a[0]; a[0] = a[i]; a[i] = tmp; AdjustHeap<T>(a, 0, i); }}/// <summary>/// 调整堆/// </summary>/// <typeparam name="T"></typeparam>/// <param name="a"></param>/// <param name="node">调整的节点</param>/// <param name="size">堆的大小</param>void AdjustHeap<T>(T[] a, int node, int size) where T : IComparable{ if (node > size / 2 - 1) { return; } int lchild = node * 2 + 1; int rchild = node * 2 + 2; int max = node; if (lchild <= size - 1 && a[lchild].CompareTo(a[max]) > 0) max = lchild; if (rchild <= size - 1 && a[rchild].CompareTo(a[max]) > 0) max = rchild; if (max != node) { T tmp = a[max]; a[max] = a[node]; a[node] = tmp; /// 调整Max节点 AdjustHeap<T>(a, max,size); }}
C#的list自带Sort方法排序
C#的list自带Sort方法排序。1000万int数据,大约4-5秒
T[] ListSort<T>(List<T> source) where T: IComparable{ source.Sort((a, b) => a.CompareTo(b)); return source.ToArray();}
Linq
Linq。1000万int数据,大约5-6秒
T[] LinqSort<T>(List<T> source){ return (from a in source orderby a select a).ToArray();}
List自带OrderBy排序
List自带OrderBy排序。1000万int数据,大约5-6秒
T[] ListOrderBy<T>(List<T> source){ return source.OrderBy(a => a).ToArray();}
总结
快速排序貌似还是相当快的,但是貌似List自带的Sort排序更好用一些,使用简单,主要是不用自己写排序算法。
阅读全文
1 0
- C#中常见排序方法
- java 中常见的排序方法
- java中常见排序方法的补充
- C#的四中排序方法
- C#的四中排序方法
- C#的四中排序方法
- c#中快速排序的方法(转载)
- c#中自带的排序方法
- 常见排序方法
- 常见的排序方法
- 常见排序方法
- 单链表常见排序方法
- Java常见排序方法
- 常见的排序方法
- java常见排序方法
- C#常见设置方法
- 快速排序中常见中轴选择方法及实现代码
- java中常见的几种排序方法
- git简单使用教程
- centos7 yum安装mongodb
- git stash clear 以后找回stash
- 小程序:逆序输出一个整数
- Android执行shell
- C#中常见排序方法
- html之marquee详解
- Python基础-进程间通讯
- 从尾到头打印链表
- SRS流媒体服务器搭建+ffmpeg推流VLC取流观看
- 51单片机测量脉冲周期
- 算法分析课每周练习 Wildcard Matching
- 通过WMI获取系统信息
- 面试题4—相关题目