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

  • 相关阅读:
    CSS3 -- 透明色(rgba)
    CSS3 -- 多背景(backgrounds)
    CSS3 -- 背景原点(background-origin)
    CSS3 -- 背景裁剪(background-clip)
    CSS3 -- 背景尺寸(background-size)
    CSS3 -- 图片边框(border-image)
    CSS3 -- 边框颜色(border-color)
    CSS3 -- 盒模型(box-sizing)
    CSS -- 字体单位(px、em、rem)
    课程总结
  • 原文地址:https://www.cnblogs.com/zjypp/p/2319298.html
Copyright © 2011-2022 走看看