1 / 16
文档名称:

四种简单的排序算法.doc

格式:doc   页数:16页
下载后只包含 1 个 DOC 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

四种简单的排序算法.doc

上传人:xxj16588 2016/6/5 文件大小:0 KB

下载得到文件列表

四种简单的排序算法.doc

相关文档

文档介绍

文档介绍:1. 插入排序算法思想插入排序使用了两层嵌套循环,逐个处理待排序的记录。每个记录与前面已经排好序的记录序列进行比较,并将其插入到合适的位置。假设数组长度为 n ,外层循环控制变量 i 由1至 n-1 依次递进,用于选择当前处理哪条记录;里层循环控制变量 j ,初始值为 i ,并由i至1 递减, 与上一记录进行对比, 决定将该元素插入到哪一个位置。这里的关键思想是, 当处理第 i 条记录时,前面 i-1 条记录已经是有序的了。需要注意的是,因为是将当前记录与相邻的上一记录相比较, 所以循环控制变量的起始值为 1( 数组下标), 如果为 0 的话, 上一记录为-1 ,则数组越界。现在我们考察一下第 i 条记录的处理情况:假设外层循环递进到第 i 条记录,设其关键码的值为 X ,那么此时有可能有两种情况: 1. 如果上一记录比 X大, 那么就交换它们, 直到上一记录的关键码比 X 小或者相等为止。 2. 如果上一记录比 X 小或者相等,那么之前的所有记录一定是有序的, 且都比 X 小,此时退出里层循环。外层循环向前递进, 处理下一条记录。算法实现(C#) public class SortAlgorithm { // 插入排序 public static void InsertSort<T, C>(T[] array, parer) where C:IComparer<T> { for ( int i= 1;i <= - 1; i++) { // Console .Write( "{0}: ", i); int j= i; while (j>=1 && pare(array[j], array[j - 1]) < 0) { swap( ref array[j], ref array[j-1]); j--; } // Console .WriteLine(); // ntArray(array); }} // 交换数组 array 中第 i 个元素和第 j个元素 private static void swap<T>( ref T x, ref T y){ // Console .Write( "{0}<-->{1} ", x, y); T temp = x; x= y; y= temp; }} 上面 () 方法和 () 方法仅仅是出于测试方便, PrintArray() 方法依次打印了数组的内容。 swap<T>() 方法则用于交换数组中的两条记录,也对交换数进行了打印(这里我注释掉了,但在测试时可以取消对它们的注释) 。外层 for 循环控制变量 i 表示当前处理第 i 条记录。 public class AlgorithmHelper { // 打印数组内容 public static void PrintArray<T>(T[] array) { Console .Write( " Array:" ); foreach (T item in array) { Console .Write( " {0}" , item); } Console .WriteLine(); }} // parer ,进行比较 public parerFactory { public static IComparer< int > parer() { return new parer(); } public class parer : IComparer< int >{ public pare( int x, int y) { return pareTo(y); }}} parerFactory 类,它用于获得一个 parer 对象,这个对象实现了 IComparer<T> 接口,规定了两个 int 类型的关键码之间比较大小的规则。如果你有自定义的类型, 比如叫 MyType , parerFactory 中再添加一个类, 比如叫 parer ,然后让这个类也实现 IComparer<T> 接口,最后再添加一个方法返回 parer 就可以了。输出演示(C#) 接下来我们看一下客户端代码和输出: static void Main( string [] args) { int [] array = {42,20,17,13,28,14,23,15}; // int [] array ={ 9, 8, 7, 6, 5, 4, 3, 2, 1,0 }; (array); (array, ComparerFact