namespace Sort {
using System;
using static System.Console;
using System.Collections.Generic;
class MainClass {
static void Main() {
int[] values = { 2, 4, 1, 9, 3, 8, 6, 20, 43, 41, 29 };
var bubbleList = new List<int>(values);
var quickList = new List<int>(values);
BubbleSort(bubbleList);
QuickSort(quickList);
}
public static void BubbleSort(List<int> bubbleList) {
Write("========= Bubble Sort =========");
Write(Environment.NewLine);
Write(Environment.NewLine);
foreach (var item in bubbleList) {
Write($"{item}, ");
}
Write(Environment.NewLine);
new BubbleSorter().Sort(bubbleList);
Write(Environment.NewLine);
foreach (var item in bubbleList) {
Write($"{item}, ");
}
Write(Environment.NewLine);
}
public static void QuickSort(List<int> quickList) {
Write(Environment.NewLine);
Write("========= Quick Sort =========");
Write(Environment.NewLine);
Write(Environment.NewLine);
foreach (var item in quickList) {
Write($"{item}, ");
}
Write(Environment.NewLine);
new QuickSorter().Sort(quickList);
Write(Environment.NewLine);
foreach (var item in quickList) {
Write($"{item}, ");
}
Write(Environment.NewLine);
}
}
}
namespace Sort {
using System;
using static System.Console;
using System.Collections.Generic;
public class BubbleSorter {
public List<int> Sort(List<int> originalList) {
var iterations = 0;
for (var i = 0; i < originalList.Count - 1; i++) {
for (var j = 0; j < originalList.Count - 1; j++) {
if (originalList[j] > originalList[j + 1]) {
var temp = originalList[j + 1];
originalList[j + 1] = originalList[j];
originalList[j] = temp;
}
iterations++;
}
iterations++;
}
WriteLine($"{Environment.NewLine}{iterations} iterations ");
return originalList;
}
}
}
namespace Sort {
using System;
using static System.Console;
using System.Collections.Generic;
public class QuickSorter {
public List<int> Sort(List<int> items, int left = 0, int right = 0) {
if (right == 0)
right = items.Count - 1;
var index = Partition(items, left, right);
if (left < index - 1) {
Sort(items, left, index - 1);
}
if (index < right) {
Sort(items, index, right);
}
return items;
}
private int Partition(List<int> items, int left, int right) {
var pivot = items[(right + left) / 2];
var i = left;
var j = right;
while (i <= j) {
while (items[i] < pivot) {
i++;
}
while (items[j] > pivot) {
j--;
}
if (i <= j) {
Swap(items, i, j);
i++;
j--;
}
}
return i;
}
private void Swap(List<int> originalList, int leftPointer, int rightPointer) {
var temp = originalList[leftPointer];
originalList[leftPointer] = originalList[rightPointer];
originalList[rightPointer] = temp;
}
}
}