zoukankan      html  css  js  c++  java
  • 2路插入排序算法C#

    2路插入排序算法,是在直接插入排序和折半插入排序算法上 再改进的。
    主要目的是减少排序过程中的移动的记录次数。但是需要N个记录的辅助空间,

    原理是:设置一个和原数组L 同类型,大小的是数组d,首先将L【0】赋值给D【0】。然后L【1】和D【0】比较,并且将D【0】看成是排好序中处于中间位置的记录,然后从L的第二个记录开始比较,依次插入到D【0】之前或者之后的有序序列中。
    如果要排序的L【n】记录比D【0】 则插入到之前的序列中

    重点是要把辅助数组看成是循环数组,设置first和final标识,来记录辅助数组的开头和结尾。first记录D的开头位置。final机制D的结尾位置,排好序以后,从first开始输出排序好的记录。。

    c#代码


      public static void BinInsertSort(ref int[] array)
            {
                int[] tempArray = new int[array.Length];//辅助数组

                int first, final;//指示辅助数组的ffirst和final
                final = 0;
                first = array.Length ;
                tempArray[final] = array[0];//原数组的i第一个值给辅助数组的第一个位置

                for (int i = 1; i < array.Length; i++)
                {

                    if (array[i] < tempArray[0])
                    {
                        int m = 0;

                        if (first == array.Length)
                        {
                            tempArray[array.Length - 1] = array[i];
                            first = first - 1;
                        }
                        else
                        {

                            for (m = first; array[i] > tempArray[m] && m < array.Length - 1; ++m)
                            {
                                tempArray[m - 1] = tempArray[m];
                               
                            }

                            tempArray[m-1] = array[i];
                            first = first - 1;
                        }
                    }
                    else
                    {
                        final = final +1;
                        int m = 0;
                        for (m = final; array[i] < tempArray[m - 1]; --m)
                        {
                            tempArray[m] = tempArray[m - 1];
                        }
                        tempArray[m] = array[i];
                    }


                  
                }
    //排序好以后,根据first和final的位置输出,
                for (int n = first; n < array.Length; n++)
                {
                    Console.WriteLine(array[n].ToString());
                }
                for (int n = 0; n <= final; n++)
                {
                    Console.WriteLine(array[n].ToString());
                }
            }

    本文使用Blog_Backup未注册版本导出,请到soft.pt42.com注册。

  • 相关阅读:
    面象对象设计原则之四:接口隔离原则(The Interface Segregation Principle,ISP)
    面象对象设计原则之三:里氏替换原则(The Liskov Substitution Principle,LSP)
    面象对象设计原则之二:开放封闭原则(Open-Closed Principle, OCP)
    面象对象设计原则之一:单一职责原则(Single Responsibility Principle, SRP)
    asp.net core 2.0中的配置(1)---Configuration
    UML类图与类的关系详解
    Javascript中的闭包和C#中的闭包
    Delphi考虑sql注入 QuotedStr
    delphi 窗体的创建和释放
    Delphi ADOQuery连接数据库的查询、插入、删除、修改
  • 原文地址:https://www.cnblogs.com/zjypp/p/2319298.html
Copyright © 2011-2022 走看看