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注册。

  • 相关阅读:
    76、HTTP如何禁用缓存?如何确认缓存?
    多态与多态性,鸭子类型,内置方法,反射,异常处理
    继承的应用,继承实现原理,super(),多继承的代码规范,组合
    类的装饰器,绑定方法与非绑定方法,继承,继承背景下的属性查找
    面向对象,类与对象,__nit__方法,属性查找,隐藏属性
    xml模块、hashlib模块、subprocess模块、os与sys模块、configparser模块
    模块:re,json,pickle,time , datetime,random,猴子补丁
    区分py文件的两种用途,包的介绍和使用,日志模块
    模块的概念、使用,搜索路径与优先级,软件开发的目录规范
    三元表达式,列表、字典、集合生成式,生成器表达式,函数递归,匿名函数,面向过程编程
  • 原文地址:https://www.cnblogs.com/zjypp/p/2319298.html
Copyright © 2011-2022 走看看