• 插入排序


    插入排序使用了两层嵌套循环,逐个处理待排序的记录。每个记录与前面已经排好序的记录序列进行比较,并将其插入到合适的位置。假设数组长度为n,外层循环控制变量i由1至n-1依次递进,用于选择当前处理哪条记录;里层循环控制变量j,初始值为i,并由i至1递减,与上一记录进行对比,决定将该元素插入到哪一个位置。这里的关键思想是,当处理第i条记录时,前面i-1条记录已经是有序的了。需要注意的是,因为是将当前记录与相邻的上一记录相比较,所以循环控制变量的起始值为1(数组下标),如果为0的话,上一记录为-1,则数组越界。
    
    现在我们考察一下第i条记录的处理情况:假设外层循环递进到第i条记录,设其关键码的值为X,那么此时有可能有两种情况:
    
    如果上一记录比X大,那么就交换它们,直到上一记录的关键码比X小或者相等为止。 
    如果上一记录比X小或者相等,那么之前的所有记录一定是有序的,且都比X小,此时退出里层循环。外层循环向前递进,处理下一条记录。
     1 pulic class void InsertSort<T,C>(T[] array,C comparer)where C:Icomparer<T>
     2 {
     3     for(int i=1;i<=array.length;i++)
     4     {
     5         j=i;
     6         while(j>=1&&comparer.Compare(array[j],array[j-1])<0)
     7         {
     8             swap(ref array[j],array[j-1]);
     9             j--;
    10         }
    11         AlgorithmHelper.PrintArray(array);
    12     }
    13 }
    14 
    15 // 交换数组array中第i个元素和第j个元素
    16 public static void swap(T)(ref T x,ref T y)
    17 {
    18     T temp=x;
    19     x=y;
    20     y=temp;
    21 }
    22 
    23 public class AlgorithmHelper {
    24     // 打印数组内容
    25     public static void PrintArray<T>(T[] array) {
    26         Console.Write("   Array:");
    27         foreach (T item in array) {
    28             Console.Write(" {0}", item);
    29         }
    30         Console.WriteLine();
    31     }
    32 }
    33 
    34 // 获得Comparer,进行比较
    35 public class ComparerFactory {
    36     public static IComparer<int> GetIntComparer() {
    37         return new IntComparer();
    38     }
    39 
    40     public class IntComparer : IComparer<int> {
    41         public int Compare(int x, int y) {
    42             return x.CompareTo(y);
    43         }
    44     }
    45 }
  • 相关阅读:
    扒几个 3D 模型备用
    向 3D 世界迈出一小步
    为什么说使用 Linux 系统学习 OpenGL 更方便
    Windows 下的 Linux环境
    windows git 的扩展用法——其他linux命令
    Linux 环境变量
    powershell(或者windows terminal)中使用git
    QT无边框窗体——拦截windows消息实现
    QT工具——开发技巧与其他工具
    QT工具——国际化工具
  • 原文地址:https://www.cnblogs.com/wywnet/p/3346288.html
Copyright © 2020-2023  润新知