基于二分查找的排序法(抓牌法)

1、  基于二分法的抓牌排序法

此方法主要模拟打扑克牌时在抓牌过程中的排序过程,第一张是基点,随后每一张牌先与第一张牌比小,小则在此位置前插入,否则与最后一张比大,大则追加到末尾。再如果则进行二分法查找与之最临近的点进行插入。

需要用到ArrayList数组,利用其插入操作,及追加操作。

例:int [] ints={3,6,9,2,17,7,4};

    

 ///

        /// 二分法排序(模拟抓牌)
        ///

        /// 待排序数组
        /// 升序
        public ArrayList Sort_Dichotomy(int[] ints)
        {
            int count = ints.Length;
            int tempCount = 2;//记录当前数组中实际存在的值
            ArrayList al = new ArrayList(count + 1);//模拟抓牌
            al.Add(0);
            al.Add(ints[0]); 


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


                if (ints[i] <= Convert.ToInt32(al[1]))//1.与最小值比小
                {
                    al.Insert(1, ints[i]);
                }
                else
                {
                    if (ints[i] >= Convert.ToInt32(al[al.Count - 1]))//与最大值比大
                    {
                        al.Add(ints[i]);
                    }
                    else//二分查找
                    {
                        int begin = 0;
                        int end = tempCount;
                        while (begin + 1 < end)
                        {
                            int middle = (begin + end) / 2;
                            int r = ints[i] - Convert.ToInt32(al[middle]) >= 0 ? 1 : -1;//分为大于等于、小于
                            switch (r)
                            {
                                case 1://大于
                                    begin = middle;
                                    break;
                                default:
                                    end = middle;
                                    break;
                            }
                        }
                        al.Insert(end, ints[i]);
                    }
                }


                tempCount += 1;//新增1


            }
            al.RemoveAt(0);
            return al;
           
        }

你可能感兴趣的:(算法)