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"; } }
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); }
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); }