public static void Sort(DataArray items) { MyDataArray copy = new MyDataArray(items.Length); for (int i = 0; i < items.Length; i++) { copy.set(i, items[i]); } if (items.Length == 0) { return; } int minValue = items[0]; int maxValue = minValue; for (int i = 0; i < items.Length; i++) { if (minValue > items[i]) { minValue = (int)items[i]; } if (maxValue < items[i]) { maxValue = (int)items[i]; } } int[] frequency = new int[maxValue - minValue + 1]; for (int i = 0; i < items.Length; i++) { frequency[(int)items[i] - minValue]++; } frequency[0]--; for (int i = 1; i < frequency.Length; i++) { frequency[i] = frequency[i] + frequency[i - 1]; } for (int i = copy.Length - 1; i >= 0; i--) { items.set(frequency[copy[i] - minValue]--, copy[i]); } }
public static void testOP(int seed) { Console.WriteLine("\n\n SELECTION SORT DATA ARRAY "); Console.WriteLine(longLine); MyDataArray dataArray = new MyDataArray(arrayLength, seed); dataArray.Print(arrayLength); Console.WriteLine(longLine); Sort(dataArray); dataArray.Print(arrayLength); Console.WriteLine("\n\n SELECTION SORT DATA LIST"); Console.WriteLine(longLine); MyDataList dataList = new MyDataList(arrayLength, seed); dataList.Print(arrayLength); Console.WriteLine(longLine); Sort(dataList); dataList.Print(arrayLength); }
public static void testArrayTimes(int seed) { int[] numElementsArray = { 12800, 25600, 51200, 102400, 204800, 409600 }; foreach (int numberOfElements in numElementsArray) { Console.Write("\nElements: " + numberOfElements); MyDataArray dataArray = new MyDataArray(numberOfElements, seed); var watch = System.Diagnostics.Stopwatch.StartNew(); Sort(dataArray); watch.Stop(); Console.Write(" Data array time:" + watch.ElapsedMilliseconds); string filename = "@mydataarraytimes.dat"; MyFileArray fileArray = new MyFileArray(filename, numberOfElements, seed); using (fileArray.fs = new System.IO.FileStream(filename, System.IO.FileMode.Open, System.IO.FileAccess.ReadWrite)) { watch = System.Diagnostics.Stopwatch.StartNew(); Sort(fileArray); watch.Stop(); Console.Write(" File array:" + watch.ElapsedMilliseconds); } } }