|
@@ -26,11 +26,6 @@ namespace SORTER
|
|
|
int[] array;
|
|
|
string path;
|
|
|
FileInfo file;
|
|
|
- Stopwatch linearTime;
|
|
|
- Stopwatch minMaxTime;
|
|
|
- Stopwatch bubleTime;
|
|
|
- Stopwatch shuttleTime;
|
|
|
- Stopwatch insertionTime;
|
|
|
|
|
|
public MainWindow()
|
|
|
{
|
|
@@ -38,346 +33,51 @@ namespace SORTER
|
|
|
}
|
|
|
|
|
|
|
|
|
- bool writeFile(string pathCopy, int[] arraySorted)
|
|
|
+ bool writeFile(string nameFile, int[] arraySorted)
|
|
|
{
|
|
|
- using (StreamWriter sw = new StreamWriter(pathCopy, false))
|
|
|
- {
|
|
|
- for (int i = 0; i < arraySorted.Length; ++i)
|
|
|
- {
|
|
|
- sw.Write(arraySorted[i] + " ");
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- return true;
|
|
|
- }
|
|
|
-
|
|
|
- (int[], string) linearSelectionSort(bool? ordering)
|
|
|
- {
|
|
|
- int[] arraySorted = new int[array.Length];
|
|
|
- int[] arrayCopy = new int[array.Length];
|
|
|
-
|
|
|
- int max = int.MinValue;
|
|
|
- int min = int.MaxValue;
|
|
|
- int index = 0;
|
|
|
-
|
|
|
- for (int i = 0; i < arrayCopy.Length; ++i)
|
|
|
- {
|
|
|
- arrayCopy[i] = array[i];
|
|
|
- }
|
|
|
-
|
|
|
- string pathCopy = file.DirectoryName + @"\Линейная сортировка.txt";
|
|
|
- if (!File.Exists(pathCopy))
|
|
|
- {
|
|
|
- File.Copy(path, pathCopy);
|
|
|
- }
|
|
|
-
|
|
|
- linearTime = new Stopwatch();
|
|
|
- linearTime.Start();
|
|
|
|
|
|
- if (ordering == false)
|
|
|
+ try
|
|
|
{
|
|
|
- while (arraySorted.Length < arrayCopy.Length)
|
|
|
+ string pathCopy = pathCopied(nameFile);
|
|
|
+ using (StreamWriter sw = new StreamWriter(pathCopy, false))
|
|
|
{
|
|
|
- for (int i = 0; i < arrayCopy.Length; ++i)
|
|
|
+ for (int i = 0; i < arraySorted.Length; ++i)
|
|
|
{
|
|
|
- if (max <= arrayCopy[i] && arrayCopy[i] != 100)
|
|
|
- {
|
|
|
- max = arrayCopy[i];
|
|
|
- index = i;
|
|
|
- }
|
|
|
+ sw.Write(arraySorted[i] + " ");
|
|
|
}
|
|
|
- arrayCopy[index] = 100;
|
|
|
- arraySorted.Append(max);
|
|
|
- max = int.MinValue;
|
|
|
}
|
|
|
}
|
|
|
- else
|
|
|
+ catch
|
|
|
{
|
|
|
- while (arraySorted.Length < arrayCopy.Length)
|
|
|
- {
|
|
|
- for (int i = 0; i < arrayCopy.Length; ++i)
|
|
|
- {
|
|
|
- if (min >= arrayCopy[i] && arrayCopy[i] != 100)
|
|
|
- {
|
|
|
- min = arrayCopy[i];
|
|
|
- index = i;
|
|
|
- }
|
|
|
- }
|
|
|
- arrayCopy[index] = 100;
|
|
|
- arraySorted.Append(min);
|
|
|
- min = int.MaxValue;
|
|
|
- }
|
|
|
+ MessageBox.Show("Ошибка записи");
|
|
|
+ return false;
|
|
|
}
|
|
|
-
|
|
|
- linearTime.Stop();
|
|
|
- return (arraySorted, pathCopy);
|
|
|
- }
|
|
|
-
|
|
|
-
|
|
|
- void methodMinMax(bool? ordering)
|
|
|
- {
|
|
|
-
|
|
|
- int[] arrayCopy = new int[array.Length];
|
|
|
-
|
|
|
- for (int i = 0; i < arrayCopy.Length; ++i)
|
|
|
- {
|
|
|
- arrayCopy[i] = array[i];
|
|
|
- }
|
|
|
-
|
|
|
- minMaxTime = new Stopwatch();
|
|
|
- minMaxTime.Start();
|
|
|
-
|
|
|
- if(ordering == false)
|
|
|
- {
|
|
|
- for (int i = 0; i < arrayCopy.Length - 1; ++i)
|
|
|
- {
|
|
|
- int max = i;
|
|
|
-
|
|
|
- for (int j = i + 1; j < arrayCopy.Length; ++j)
|
|
|
- {
|
|
|
- if (arrayCopy[j].CompareTo(arrayCopy[max]) > 0)
|
|
|
- {
|
|
|
- max = j;
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- int temp = array[i];
|
|
|
- arrayCopy[i] = array[max];
|
|
|
- arrayCopy[max] = temp;
|
|
|
- }
|
|
|
-
|
|
|
- }
|
|
|
- else
|
|
|
- {
|
|
|
- for (int i = 0; i < arrayCopy.Length - 1; ++i)
|
|
|
- {
|
|
|
- int max = i;
|
|
|
-
|
|
|
- for (int j = i + 1; j < arrayCopy.Length; ++j)
|
|
|
- {
|
|
|
- if (arrayCopy[j].CompareTo(arrayCopy[max]) < 0)
|
|
|
- {
|
|
|
- max = j;
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- int temp = arrayCopy[i];
|
|
|
- arrayCopy[i] = arrayCopy[max];
|
|
|
- arrayCopy[max] = temp;
|
|
|
- }
|
|
|
-
|
|
|
- }
|
|
|
-
|
|
|
- minMaxTime.Stop();
|
|
|
-
|
|
|
- string pathCopy = file.DirectoryName + @"\МинМакс.txt";
|
|
|
- if(!File.Exists(pathCopy))
|
|
|
- {
|
|
|
- File.Copy(path, pathCopy);
|
|
|
- }
|
|
|
-
|
|
|
- writeFile(pathCopy, arrayCopy);
|
|
|
+ return true;
|
|
|
}
|
|
|
|
|
|
-
|
|
|
- void BubbleSort(bool? ordering)
|
|
|
+ string pathCopied(string nameFile)
|
|
|
{
|
|
|
+ string pathCopy = file.DirectoryName + nameFile;
|
|
|
|
|
|
- int[] arrayCopy = new int[array.Length];
|
|
|
-
|
|
|
- for (int i = 0; i < arrayCopy.Length; ++i)
|
|
|
- {
|
|
|
- arrayCopy[i] = array[i];
|
|
|
- }
|
|
|
-
|
|
|
- int temp;
|
|
|
-
|
|
|
- bubleTime = new Stopwatch();
|
|
|
- bubleTime.Start();
|
|
|
-
|
|
|
- if (ordering == false)
|
|
|
- {
|
|
|
- for (int i = 0; i < arrayCopy.Length - 1; i++)
|
|
|
- {
|
|
|
- for (int j = 0; j < arrayCopy.Length - i - 1; j++)
|
|
|
- {
|
|
|
- if (arrayCopy[j + 1] > arrayCopy[j])
|
|
|
- {
|
|
|
- temp = arrayCopy[j + 1];
|
|
|
- arrayCopy[j + 1] = arrayCopy[j];
|
|
|
- arrayCopy[j] = temp;
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- else
|
|
|
- {
|
|
|
- for (int i = 0; i < arrayCopy.Length - 1; i++)
|
|
|
- {
|
|
|
- for (int j = 0; j < arrayCopy.Length - i - 1; j++)
|
|
|
- {
|
|
|
- if (arrayCopy[j + 1] < arrayCopy[j])
|
|
|
- {
|
|
|
- temp = arrayCopy[j + 1];
|
|
|
- arrayCopy[j + 1] = arrayCopy[j];
|
|
|
- arrayCopy[j] = temp;
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- bubleTime.Stop();
|
|
|
-
|
|
|
- string pathCopy = file.DirectoryName + @"\Пузырьковая сортировка.txt";
|
|
|
if (!File.Exists(pathCopy))
|
|
|
{
|
|
|
File.Copy(path, pathCopy);
|
|
|
}
|
|
|
|
|
|
- writeFile(pathCopy, arrayCopy);
|
|
|
+ return pathCopy;
|
|
|
}
|
|
|
|
|
|
-
|
|
|
- void ShuttleSort(bool? ordering)
|
|
|
+ int[] arrayCopied()
|
|
|
{
|
|
|
-
|
|
|
int[] arrayCopy = new int[array.Length];
|
|
|
-
|
|
|
for (int i = 0; i < arrayCopy.Length; ++i)
|
|
|
{
|
|
|
arrayCopy[i] = array[i];
|
|
|
}
|
|
|
-
|
|
|
- int temp;
|
|
|
-
|
|
|
- shuttleTime = new Stopwatch();
|
|
|
- shuttleTime.Start();
|
|
|
-
|
|
|
- if(ordering == false)
|
|
|
- {
|
|
|
- for (int i = 1; i < arrayCopy.Length; i++)
|
|
|
- {
|
|
|
- if (arrayCopy[i] > arrayCopy[i - 1])
|
|
|
- {
|
|
|
- temp = arrayCopy[i];
|
|
|
- arrayCopy[i] = arrayCopy[i - 1];
|
|
|
- arrayCopy[i - 1] = temp;
|
|
|
- for (int j = i - 1; (j - 1) >= 0; j--)
|
|
|
- {
|
|
|
- if (arrayCopy[j] > arrayCopy[j - 1])
|
|
|
- {
|
|
|
- temp = arrayCopy[j];
|
|
|
- arrayCopy[j] = arrayCopy[j - 1];
|
|
|
- arrayCopy[j - 1] = temp;
|
|
|
- }
|
|
|
- else
|
|
|
- {
|
|
|
- break;
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- else
|
|
|
- {
|
|
|
- for (int i = 1; i < arrayCopy.Length; i++)
|
|
|
- {
|
|
|
- if (arrayCopy[i] < arrayCopy[i - 1])
|
|
|
- {
|
|
|
- temp = arrayCopy[i];
|
|
|
- arrayCopy[i] = arrayCopy[i - 1];
|
|
|
- arrayCopy[i - 1] = temp;
|
|
|
- for (int j = i - 1; (j - 1) >= 0; j--)
|
|
|
- {
|
|
|
- if (arrayCopy[j] < arrayCopy[j - 1])
|
|
|
- {
|
|
|
- temp = arrayCopy[j];
|
|
|
- arrayCopy[j] = arrayCopy[j - 1];
|
|
|
- arrayCopy[j - 1] = temp;
|
|
|
- }
|
|
|
- else
|
|
|
- {
|
|
|
- break;
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- shuttleTime.Stop();
|
|
|
-
|
|
|
- string pathCopy = file.DirectoryName + @"\Челночная сортировка.txt";
|
|
|
- if (!File.Exists(pathCopy))
|
|
|
- {
|
|
|
- File.Copy(path, pathCopy);
|
|
|
- }
|
|
|
-
|
|
|
- writeFile(pathCopy, arrayCopy);
|
|
|
+ return arrayCopy;
|
|
|
}
|
|
|
|
|
|
-
|
|
|
- void InsertionSort(bool? ordering)
|
|
|
- {
|
|
|
-
|
|
|
- int[] arrayCopy = new int[array.Length];
|
|
|
-
|
|
|
- for (int i = 0; i < arrayCopy.Length; ++i)
|
|
|
- {
|
|
|
- arrayCopy[i] = array[i];
|
|
|
- }
|
|
|
-
|
|
|
- int index, temp;
|
|
|
-
|
|
|
- insertionTime = new Stopwatch();
|
|
|
- insertionTime.Start();
|
|
|
-
|
|
|
- if (ordering == false)
|
|
|
- {
|
|
|
- for (int i = 0; i < arrayCopy.Length; ++i)
|
|
|
- {
|
|
|
- index = i;
|
|
|
- temp = arrayCopy[i];
|
|
|
- for (int j = i + 1; j < arrayCopy.Length; ++j)
|
|
|
- {
|
|
|
- if (arrayCopy[j] > temp)
|
|
|
- {
|
|
|
- index = j;
|
|
|
- temp = arrayCopy[j];
|
|
|
- }
|
|
|
- }
|
|
|
- arrayCopy[index] = arrayCopy[i];
|
|
|
- arrayCopy[i] = temp;
|
|
|
- }
|
|
|
- }
|
|
|
- else
|
|
|
- {
|
|
|
- for (int i = 0; i < arrayCopy.Length; ++i)
|
|
|
- {
|
|
|
- index = i;
|
|
|
- temp = arrayCopy[i];
|
|
|
- for (int j = i + 1; j < arrayCopy.Length; ++j)
|
|
|
- {
|
|
|
- if (arrayCopy[j] < temp)
|
|
|
- {
|
|
|
- index = j;
|
|
|
- temp = arrayCopy[j];
|
|
|
- }
|
|
|
- }
|
|
|
- arrayCopy[index] = arrayCopy[i];
|
|
|
- arrayCopy[i] = temp;
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- insertionTime.Stop();
|
|
|
-
|
|
|
- string pathCopy = file.DirectoryName + @"\Сортировка вставки.txt";
|
|
|
- if (!File.Exists(pathCopy))
|
|
|
- {
|
|
|
- File.Copy(path, pathCopy);
|
|
|
- }
|
|
|
-
|
|
|
- writeFile(pathCopy, arrayCopy);
|
|
|
- }
|
|
|
+
|
|
|
|
|
|
private void SortButton_Click(object sender, RoutedEventArgs e)
|
|
|
{
|
|
@@ -389,24 +89,28 @@ namespace SORTER
|
|
|
{
|
|
|
if (LinearButton.IsChecked == true)
|
|
|
{
|
|
|
- (int[] array, string pathCopy) = linearSelectionSort(Ascending.IsChecked);
|
|
|
- writeFile(pathCopy, array);
|
|
|
+ int[] arraySorted = sortClass.linearSelectionSort(Ascending.IsChecked, arrayCopied());
|
|
|
+ writeFile(@"\Линейный выбор.txt", arraySorted);
|
|
|
}
|
|
|
else if (minMaxButton.IsChecked == true)
|
|
|
{
|
|
|
- methodMinMax(Ascending.IsChecked);
|
|
|
+ int[] arraySorted = sortClass.methodMinMax(Ascending.IsChecked, arrayCopied());
|
|
|
+ writeFile(@"\МинМакс.txt", arraySorted);
|
|
|
}
|
|
|
else if (BubbleButton.IsChecked == true)
|
|
|
{
|
|
|
- BubbleSort(Ascending.IsChecked);
|
|
|
+ int[] arraySorted = sortClass.BubbleSort(Ascending.IsChecked, arrayCopied());
|
|
|
+ writeFile(@"\Пузырьковая сортировка.txt", arraySorted);
|
|
|
}
|
|
|
else if (ShuttleButton.IsChecked == true)
|
|
|
{
|
|
|
- ShuttleSort(Ascending.IsChecked);
|
|
|
+ int[] arraySorted = sortClass.ShuttleSort(Ascending.IsChecked, arrayCopied());
|
|
|
+ writeFile(@"\Челночная сортировка.txt", arraySorted);
|
|
|
}
|
|
|
else if (InsertionButton.IsChecked == true)
|
|
|
{
|
|
|
- InsertionSort(Ascending.IsChecked);
|
|
|
+ int[] arraySorted = sortClass.InsertionSort(Ascending.IsChecked, arrayCopied());
|
|
|
+ writeFile(@"\Сортировка вставки.txt", arraySorted);
|
|
|
}
|
|
|
|
|
|
MessageBox.Show("Массив отсортирован, файл с ним находится рядом с выбранным файлом");
|
|
@@ -448,13 +152,13 @@ namespace SORTER
|
|
|
|
|
|
private void Diagram_Click(object sender, RoutedEventArgs e)
|
|
|
{
|
|
|
- if (linearTime == null || minMaxTime == null || bubleTime == null || shuttleTime == null || insertionTime == null)
|
|
|
+ if (sortClass.linearTime == null || sortClass.minMaxTime == null || sortClass.bubleTime == null || sortClass.shuttleTime == null || sortClass.insertionTime == null)
|
|
|
{
|
|
|
MessageBox.Show("Для того, чтобы построить диаграмму, нужно отсортировать массив всеми способами");
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
- Diagram wnd = new Diagram(linearTime.ElapsedTicks, minMaxTime.ElapsedTicks, bubleTime.ElapsedTicks, shuttleTime.ElapsedTicks, insertionTime.ElapsedTicks);
|
|
|
+ Diagram wnd = new Diagram(sortClass.linearTime.ElapsedTicks, sortClass.minMaxTime.ElapsedTicks, sortClass.bubleTime.ElapsedTicks, sortClass.shuttleTime.ElapsedTicks, sortClass.insertionTime.ElapsedTicks);
|
|
|
wnd.Show();
|
|
|
}
|
|
|
}
|