class SortC<T>:ISort<T>where T:IComparable { // 选择排序 publicvoid Sort(T[] data) { for (int i =0; i < data.Length; i++) { int lowIndex = i; for (int j = data.Length -1; j > i; j--) { if (data[j] .CompareTo(data[lowIndex])==1) { lowIndex = j; } } Swaper<T>.Swap(ref data[i], ref data[lowIndex]); } } }
class Swaper<T>where T:IComparable { static T temp =default(T); publicstaticvoid Swap(ref T left ,ref T right) { temp = left; left = right; right = temp; } }
下面两个是其他算法:
Code <!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->publicclass SortB<T> : ISort<T>where T : IComparable { publicvoid Sort(T[] data) { quickSort(data, 0, data.Length -1); } privatevoid quickSort(T[] data, int i, int j) { int pivotIndex = (i + j) /2; Swaper<T>.Swap( ref data[pivotIndex], ref data[j]); int k = partition(data, i -1, j, data[j]); Swaper<T>.Swap(ref data[k], ref data[j]); if ((k - i) >1) quickSort(data, i, k -1); if ((j - k) >1) quickSort(data, k +1, j); } privateint partition(T[] data, int l, int r, T pivot) { do { while (data[++l].CompareTo(pivot)==1) ; while ((r !=0) && data[--r].CompareTo( pivot)==-1) ; Swaper<T>.Swap(ref data[l], ref data[r]); } while (l < r); Swaper<T>.Swap(ref data[l], ref data[r]); return l; } }
Code <!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->class SortA<T>:ISort<T>where T:IComparable { publicvoid Sort(T[] t) { for (int i =0; i < t.Length-1; i++) { for (int j = i; j < t.Length; j++) { if (t[i].CompareTo(t[j]) ==1) { Swaper<T>.Swap(ref t[i], ref t[j]); } } } } }