C# 簡單實現 奇葩排序中的算盤排序(算珠排序)算法

Console.WriteLine("Hello World!");
            int[] arr = { 1, 3, 4, 0, 22, 4,0, 6, 3,10,8,6,7 };
            Console.WriteLine(string.Join("," ,arr.ToList()));
            int len = arr.Length;
            int maxCol = arr.Max();

            int [][]suanpan=new int[len][];

            for (int i = 0; i < len; i++)
            {
                suanpan[i] = new int[maxCol];
                for (int j = 0; j < arr[i]; j++)
                {
                    suanpan[i][j] = 1;
                }
            }

            /*
             從每列底部開始判斷 向上填充
             
             */
            for (int i = 0; i < maxCol; i++)
            {
                
                int di = len - 1;
                int k = di;//當指向的值爲0,則往上尋找
                while (k > -1)
                {
                    while (k > -1&&suanpan[k][i] != 1)//尋找每列爲1的行座標
                    {

                        k--;
                    }
                    if (k < 0)
                    {
                        break;
                    }

                    if (suanpan[k][i] == 1)//找到了
                    {
                        if (k == di)//相等說明,找到的是原來的,底部和k都上移一位
                        {
                            k -= 1;
                            di -= 1;
                        }
                        else
                        {
                            suanpan[di][i] = 1;//珠子往下移
                            suanpan[k][i] = 0;//移動後置爲0
                            di -= 1;//填充了一位,底部往上移
                        }
                    }
                }

            }
            var sort = new int[len];
            for (int i = 0; i < len; i++)
            {
                sort[i] = suanpan[i].Sum();
            }
            Console.WriteLine(string.Join(",", sort.ToList()));
            Console.ReadKey();

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章