public static Program instance;
public void Trocar(ref string[] items, int index1, int index2)
string temp = int.Parse(items[index1]).ToString();
items[index1] = int.Parse(items[index2]).ToString();
public void Ordenar(ref string[] items, int itemsSize)
if (itemsSize < 1) return;
for (int i = 0; i < itemsSize; i++){
if (int.Parse(items[i]) > int.Parse(items[i + 1]))
Trocar(ref items, i, i + 1);
this.Ordenar(ref items, itemsSize - 1);
public int[] ToIntArray(string[] args)
string[] splitedSortedArgs = args[0].Split(",", StringSplitOptions.RemoveEmptyEntries);
int[] items = new int[splitedSortedArgs.Length];
for (int i = 0; i < splitedSortedArgs.Length; i++)
items[i] = int.Parse(splitedSortedArgs[i]);
public string OrdenaArray(params string[] args)
var resultado = string.Empty;
ICollectionSort collectionSort = new BubbleSort(args);
resultado = collectionSort.ToString();
public string BuscaItensFaltantesNaSequencia(params string[] args)
var resultado = string.Empty;
int[] sortedValue = this.ToIntArray(args);
string itemsSpeakers = string.Empty;
for (int i = 0; i < sortedValue.Length - 1; i++)
var currentValue = sortedValue[i];
var nextValue = sortedValue[i + 1];
while (nextValue > (currentValue + sumValue)) {
itemsSpeakers += (currentValue + sumValue).ToString() + ",";
resultado = itemsSpeakers.TrimEnd(new char[] { ','});
public static void Main()
instance = instance ?? new Program();
var ordenado = instance.OrdenaArray("6", "3", "5", "4", "01", "7", "9");
var itensFaltantes = instance.BuscaItensFaltantesNaSequencia(ordenado);
var resultadoOrdenadoEsperado = "1,3,4,5,6,7,9";
var resultadoItensFaltantesEsperado = "2,8";
Console.WriteLine(ordenado == resultadoOrdenadoEsperado ? $"CORRETO {ordenado} == {resultadoOrdenadoEsperado}": $"INCORRETO {ordenado} != {resultadoOrdenadoEsperado}");
Console.WriteLine(itensFaltantes == resultadoItensFaltantesEsperado ? $"CORRETO {itensFaltantes} == {resultadoItensFaltantesEsperado}": $"INCORRETO {itensFaltantes} != {resultadoItensFaltantesEsperado}");
public interface ICollectionSort
public abstract class CollectionSort : ICollectionSort
protected int[] Items { get; set; }
public CollectionSort(string[] items)
this.Items = this.ToIntArray(items);
public CollectionSort(int[] items)
public virtual void Sort()
throw new NotImplementedException();
public abstract int[] ToIntArray(string[] items);
public override string ToString()
if (this.Items != null) {
return string.Join(",", this.Items);
public class BubbleSort : CollectionSort
public BubbleSort(string[] items) : base(items) { }
public BubbleSort(int[] items) : base(items) { }
public override void Sort()
this.ToSort(this.Items.Length - 1);
private void ChangePosition(int index1, int index2)
int aux = this.Items[index1];
this.Items[index1] = this.Items[index2];
this.Items[index2] = aux;
public void ToSort(int itemsSize)
if (itemsSize < 1) return;
for (int i = 0; i < itemsSize; i++)
if (this.Items[i] > this.Items[i + 1])
this.ChangePosition(i, i + 1);
this.ToSort(itemsSize - 1);
public override int[] ToIntArray(string[] items)
int[] iItens = new int[items.Length];
for (int i = 0; i < items.Length; i++)
iItens[i] = int.Parse(items[i]);
public class InsertionSort : CollectionSort
public InsertionSort(string[] items) : base(items) { }
public InsertionSort(int[] items) : base(items) { }
public override void Sort()
for (int i = 0; i < this.Items.Length; i++)
var indexCompare = i - 1;
while (indexCompare >= 0 && this.Items[indexCompare] > aux)
this.Items[indexCompare + 1] = this.Items[indexCompare];
this.Items[indexCompare + 1] = aux;
public override int[] ToIntArray(string[] items)
int[] iItens = new int[items.Length];
for (int i = 0; i < items.Length; i++)
iItens[i] = int.Parse(items[i]);