using System.Collections.Generic;
private static List<int> theList;
private static Random r = new Random();
public static void Main()
theList = new List<int>();
for(int i = 0; i < 20; i++) {
theList.Add(r.Next(1, 101));
Console.Write("List contents: ");
theList = SelectionSort(theList);
Console.Write("List after SelectionSort(): " );
theList = InsertionSort(theList);
Console.Write("List after InsertionSort(): " );
int[] listArray = new int[20];
listArray = MergeSort(theList.ToArray());
theList = listArray.ToList();
Console.Write("List after MergeSort(): " );
theList = QuickSort(theList, 0, theList.Count() - 1);
Console.Write("List after QuickSort(): " );
theList = StoogeSort(theList, 0, theList.Count - 1);
Console.Write("List after StoogeSort(): " );
public static int MainMenu() {
Console.WriteLine("\n\nChoose an option");
Console.WriteLine("----------------");
Console.WriteLine("[1] SelectionSort()");
Console.WriteLine("[2] InsertionSort()");
Console.WriteLine("[3] MergeSort()");
Console.WriteLine("[4] QuickSort()");
Console.WriteLine("[5] StoogeSort()");
Console.WriteLine("----------------");
Console.Write("Enter choice: ");
option = Convert.ToInt32(Console.ReadLine());
while(option < 1 || option > 5) {
Console.WriteLine("Not a valid choice");
Console.Write("Enter choice: ");
option = Convert.ToInt32(Console.ReadLine());
public static void DisplayList(List<int> list) {
foreach(int item in list) {
Console.Write(item + " ");
public static List<int> SelectionSort(List<int> list) {
for (int i = 0; i < list.Count - 1; i++) {
for (int j = i + 1; j < list.Count; j++) {
if (list[j] < list[pos_min]) {
public static List<int> InsertionSort(List<int> list) {
for (int i = 1; i < list.Count; i++) {
while (j >= 0 && list[j] > temp) {
public static int[] MergeSort(int[] array) {
int middleIndex = (array.Length) / 2;
int[] left = new int[middleIndex];
int[] right = new int[array.Length - middleIndex];
Array.Copy(array, left, middleIndex);
Array.Copy(array, middleIndex, right, 0, right.Length);
right = MergeSort(right);
return Merge(left, right);
public static int[] Merge(int[] left, int[] right) {
List<int> leftList = left.OfType<int>().ToList();
List<int> rightList = right.OfType<int>().ToList();
List<int> resultList = new List<int>();
while (leftList.Count > 0 || rightList.Count > 0) {
if (leftList.Count > 0 && rightList.Count > 0) {
if (leftList[0] <= rightList[0]) {
resultList.Add(leftList[0]);
resultList.Add(rightList[0]);
else if (leftList.Count > 0) {
resultList.Add(leftList[0]);
else if (rightList.Count > 0) {
resultList.Add(rightList[0]);
int[] result = resultList.ToArray();
public static List<int> QuickSort(List<int> list, int left, int right) {
IComparable pivot = list[(left + right) / 2];
while (list[i].CompareTo(pivot) < 0) {
while (list[j].CompareTo(pivot) > 0) {
IComparable tmp = list[i];
list[j] = Convert.ToInt32(tmp);
QuickSort(list, left, j);
QuickSort(list, i, right);
private static List<T> StoogeSort<T>(List<T> list, int i, int j) where T : IComparable {
if (list[j].CompareTo(list[i]) < 0) {
StoogeSort(list, i, j - t);
StoogeSort(list, i + t, j);
StoogeSort(list, i, j - t);