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();