Ejemplo n.º 1
0
        public void ChangeSortName(string colName)
        {
            //根据列名找到字段名
            string fName = null;

            foreach (string nps in SortNames.Split(','))
            {
                string[] np = nps.Split(':');
                if (np[0] == colName)
                {
                    fName = np[1];
                    break;
                }
            }
            //没找到,直接返回
            if (fName == null)
            {
                return;
            }
            //如果找到了,看当前字段名是否变化了,没变化,则修改排序规则(倒序、正序)
            if (fName == SortName)
            {
                //排序规则切换
                Order = Order == "asc" ? "desc" : "asc";
            }
            else
            {
                //设置排序字段,默认正序
                SortName = fName;
                Order    = "asc";
            }
        }
Ejemplo n.º 2
0
        public static void Sort(uint[] UnsortedArray, int Length, SortNames AlgorithmName)
        {
            ISort Algorithm = null;

            switch (AlgorithmName)
            {
            case (SortNames.SelectionSort):
                Algorithm = new SelectionSort();
                break;

            case (SortNames.InsertionSort):
                Algorithm = new InsertionSort();
                break;

            case (SortNames.ShellSort1):
                Algorithm = new ShellSort1();
                break;

            case (SortNames.ShellSort2):
                Algorithm = new ShellSort2();
                break;

            case (SortNames.QuickSort):
                Algorithm = new QuickSort();
                break;

            case (SortNames.MergeSort):
                Algorithm = new MergeSort();
                break;

            case (SortNames.RadixSort):
                Algorithm = new RadixSort();
                break;
            }
            Algorithm.Sort(UnsortedArray, Length);
        }
Ejemplo n.º 3
0
        public static uint[] GenerateArray(int Length, SortCases Case, SortNames Name)
        {
            uint[] garr = new uint[Length];
            switch (Case)
            {
            case SortCases.Best:
                switch (Name)
                {
                case (SortNames.RadixSort):
                    int ind = 0;
                    while (ind < Length)
                    {
                        for (uint m = 0; m <= 255; m++)
                        {
                            for (uint k = 0; k <= 255; k++)
                            {
                                for (uint l = 0; l <= 255; l++)
                                {
                                    for (uint j = 0; j <= 255; j++)
                                    {
                                        garr[ind] = (uint)(1000000000 * m + 1000000 * k + 1000 * l + j);
                                        ind++;
                                        if (ind >= Length)
                                        {
                                            break;
                                        }
                                    }
                                    if (ind >= Length)
                                    {
                                        break;
                                    }
                                }
                                if (ind >= Length)
                                {
                                    break;
                                }
                            }
                            if (ind >= Length)
                            {
                                break;
                            }
                        }
                    }
                    break;

                default:
                    for (int i = 0; i < Length; i++)
                    {
                        garr[i] = (uint)i;
                    }
                    break;
                }
                break;

            case SortCases.Ordinary:
                Random rnd = new Random();
                for (int i = 0; i < Length; i++)
                {
                    garr[i] = (uint)(rnd.NextDouble() * 3000000);
                }
                break;

            case SortCases.Worst:
                switch (Name)
                {
                case (SortNames.SelectionSort):
                    int mid = Length / 2;
                    for (int i = 0; i < mid; i++)
                    {
                        garr[i] = (uint)(Length - i - 1);
                    }
                    for (int i = mid; i < Length; i++)
                    {
                        garr[i] = (uint)(i - mid);
                    }
                    break;

                case (SortNames.RadixSort):
                    int ind = 0;
                    while (ind < Length)
                    {
                        for (uint m = 255; m >= 0; m--)
                        {
                            m = m << 24;
                            for (uint k = 255; k >= 0; k--)
                            {
                                k = k << 16;
                                for (uint l = 255; l >= 0; l--)
                                {
                                    l = l << 8;
                                    for (uint j = 255; j >= 0; j--)
                                    {
                                        garr[ind] = (uint)(m + k + l + j);
                                        ind++;
                                        if (ind >= Length)
                                        {
                                            break;
                                        }
                                    }
                                    if (ind >= Length)
                                    {
                                        break;
                                    }
                                }
                                if (ind >= Length)
                                {
                                    break;
                                }
                            }
                            if (ind >= Length)
                            {
                                break;
                            }
                        }
                    }
                    break;

                default:
                    for (int i = 0; i < Length; i++)
                    {
                        garr[i] = (uint)(Length - i - 1);
                    }
                    //for (int i = 0; i < Length; i++)
                    //{
                    //    garr[i] = 1000;
                    //}
                    break;
                }

                //for (int i = 0; i < Length; i++)
                //{
                //    garr[i] = 1000;
                //}
                break;

            default:
                Console.WriteLine("Указан неизвестный вариант генерации массива.");
                break;
            }
            return(garr);
        }