예제 #1
0
        //BucketSort String
        public string[] BucketSort(string[] arrSort)
        {
            StopWatch a = new StopWatch();

            a.Start();

            string[,] Bucket = new string[27, arrSort.Length];
            int o = 0;

            while (o < 12)
            {
                for (int r = 0; r < 27; r++)
                {
                    for (int c = 0; c < arrSort.Length; c++)
                    {
                        Bucket[r, c] = "";
                    }
                }
                int j = 0;
                for (int b = 0; b < arrSort.Length; b++)
                {
                    arrSort[b] = arrSort[b].ToUpper();
                }
                foreach (string element in arrSort)
                {
                    char[] arrChar = element.ToCharArray();

                    if (arrChar.Length - (o + 1) < 0)
                    {
                        int placement = (int)arrChar[0] - 64;
                        Bucket[placement, j] = element;
                        j++;
                    }
                    else
                    {
                        int index     = arrChar.Length - (o + 1);
                        int placement = (int)arrChar[index] - 64;
                        Bucket[placement, j] = element;
                        j++;
                        numSwaps++;
                        numComparisons++;
                    }
                }
                int m = 0;
                for (int r = 0; r < 27; r++)
                {
                    for (int c = 0; c < arrSort.Length; c++)
                    {
                        if (Bucket[r, c] != "")
                        {
                            arrSort[m] = Bucket[r, c];
                            m++;
                        }
                    }
                }
                o++;
            }
            a.Stop();

            time = a.GetElapsedTime();

            numSorted = arrSort.Length;

            return(arrSort);
        }
예제 #2
0
        //BucketSort Int
        public int[] BucketSort(int[] arrSort)
        {
            StopWatch a = new StopWatch();

            a.Start();

            if (arrSort.Count() == 0)
            {
                throw new ArgumentNullException();
            }

            else
            {
                int maxValue = arrSort[0];
                int minValue = arrSort[0];
                for (int i = 1; i < arrSort.Length; i++)
                {
                    if (arrSort[i].CompareTo(maxValue) > 0)
                    {
                        maxValue = arrSort[i];
                    }

                    if (arrSort[i].CompareTo(minValue) < 0)
                    {
                        minValue = arrSort[i];
                    }
                }

                List <int>[] bucket = new List <int> [maxValue - minValue + 1];

                for (int i = 0; i < bucket.Length; i++)
                {
                    bucket[i] = new List <int>();
                }

                for (int i = 0; i < arrSort.Length; i++)
                {
                    bucket[arrSort[i] - minValue].Add(arrSort[i]);
                    numSwaps++;
                    numComparisons++;
                }

                int k = 0;
                for (int i = 0; i < bucket.Length; i++)
                {
                    if (bucket[i].Count > 0)
                    {
                        for (int j = 0; j < bucket[i].Count; j++)
                        {
                            arrSort[k] = bucket[i][j];
                            k++;
                        }
                    }
                }
                a.Stop();
                time      = a.GetElapsedTime();
                numSorted = arrSort.Length;

                return(arrSort);
            }
        }