只是一个快速的笔记,这不是功课.我只是想刷新我的算法.我在C#中使用MergeSort来编写一个可以根据泛型进行排序的递归方法:
class SortAlgorithms { public T[] MergeSort<T> (T[] unsortedArray) where T : System.IComparable<T> { T[] left,right; int middle = unsortedArray.Length / 2; left = new T[middle]; right = new T[unsortedArray.Length - middle]; if (unsortedArray.Length <= 1) return unsortedArray; for (int i = 0; i < middle; i++) { left[i] = unsortedArray[i]; } for (int i = middle; i < unsortedArray.Length; i++) { right[i - middle] = unsortedArray[i]; } left = MergeSort(left); right = MergeSort(right); return Merge<T>(left,right); } private T[] Merge<T> (T[] left,T[] right) where T : System.IComparable<T> { T[] result = new T[left.Length + right.Length]; int currentElement = 0; while (left.Length > 0 || right.Length > 0) { if (left.Length > 0 && right.Length > 0) { if (left[0].Compareto(right[0]) < 0) { result[currentElement] = left[0]; left = left.Skip(1).ToArray(); currentElement++; } else { result[currentElement] = right[0]; right = right.Skip(1).ToArray(); currentElement++; } } else if (left.Length > 0) { result[currentElement] = left[0]; left = left.Skip(1).ToArray(); currentElement++; } else if (right.Length > 0) { result[currentElement] = right[0]; right = right.Skip(1).ToArray(); currentElement++; } } return result; } }
这是有效的,但它是痛苦的慢.我使用System.Diagnostic.StopWatch来检查Array.sort(使用QuickSort算法)的性能与我的MergeSort进行比较,差异是非常重要的,我想知道是否可能我正在实现这个错误.任何意见?
解决方法
原文地址:https://www.jb51.cc/csharp/92525.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。