标签:
排序,即是以一定的规则组织数据,排序算法的优劣关键在于比较数据的交换和移动次数.
排序算法需要考虑的几点:数据交换次数,移动次数,数据越界,算法的实用性(符合多种类型)
//预知:使用C#拓展方法进行数据输出,使用StringBuilder节约内存开销 public static class DebugExtension { public static void DebugArray<T>(T[] array) { StringBuilder sb = new StringBuilder(array.Count() *2); for (int i = 0; i < array.Count(); i++) { sb.Append(array[i]); sb.Append(","); } Console.WriteLine(sb); } }
以下排序算法规则皆从左到右,从小到大进行数据排序:
public void InsertionSort<T>(T[] datas) where T :IComparable<T> { for (int i = 0; i < datas.Count() - 1; i++) { int temp; for (int j = i; j >= 0; j--) { if (datas[j] > datas[j + 1]) { temp = datas[j + 1]; datas[j + 1] = datas[j]; datas[j] = temp; } } } }
代码2: public void InsertionSort<T>(T[] datas) where T :IComparable<T> { if (datas == null) return; // 第一轮比较N-1次,从 第二个数到最后一个数,每次依次和左侧相比 for (int i = 1 , j; i < datas.Count(); i++) { T temp = datas[i]; for (j = i; j > 0 && temp.CompareTo(datas[j - 1]) < 0; j--) { datas[j] = datas[j - 1]; } datas[j] = temp; } }
待排序数组如下: int[] insertDatas = { 5, 7, 3, 5, 2, 11, 90, 4, 2, 1, 3 }; Program program = new Program(); program.InsertionSort(insertDatas); DebugExtension.DebugArray(insertDatas);
标签:
原文地址:http://www.cnblogs.com/liaoguipeng/p/5279105.html