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(): " );
theList = MergeSort(theList);
Console.Write("List after MergeSort(): " );
theList = QuickSort(theList);
Console.Write("List after QuickSort(): " );
theList = StoogeSort(theList);
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 List<int> MergeSort(List<int> list) {
int middleIndex = (list.Count) / 2;
List<int> left = new List<int>(new int[middleIndex]);
List<int> right = new List<int>(new int[list.Count - middleIndex]);
Array.Copy(list.ToArray(), left.ToArray(), middleIndex);
Array.Copy(list.ToArray(), middleIndex, right.ToArray(), 0, right.Count);
right = MergeSort(right);
return Merge(left, right);
public static List<int> Merge(List<int> left, List<int> right) {
List<int> leftList = left;
List<int> rightList = right;
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]);
public static List<int> QuickSort(List<int> list) {
public static List<int> StoogeSort(List<int> list) {