public void SortTshirtAscending(List <Tshirt> tshirts) { if (tshirts == null || tshirts.Count <= 1) { return; } int m = Enum.GetNames(typeof(Size)).Length; int n = tshirts.Count / m; List <Tshirt>[] buckets = new List <Tshirt> [n]; for (int i = 0; i < n; i++) { buckets[i] = new List <Tshirt>(); } for (int i = 0; i < tshirts.Count; i++) { int bucket = (int)tshirts[i].Size; buckets[bucket].Add(tshirts[i]); } ISortStrategy strategy = new BubbleSortStrategy(); for (int i = 0; i < n; i++) { strategy.SortTshirtAscending(buckets[i]); } int index = 0; for (int i = 0; i < n; i++) { for (int j = 0; j < buckets[i].Count; j++) { tshirts[index++] = buckets[i][j]; } } }