Bubble-Sort versi CRUD


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace BubbleSort_2dimensi_versi_CRUD
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Assalamualaikum haloo sayankk, mari belajar bubblesort versi CRUD yokk!");
            Console.WriteLine("jadi aku mau ajarin kamu, gimana sih konsep bubblesort itu?");
            Console.WriteLine("nahh jadii aku buatkan kamu codingan ini untuk menjelaskan apa itu bubblesort");
            Console.WriteLine("aku akan membuatkan versi CRUD agar lebih gampang, eitss ini hasil aku belajar lohh");
            Console.WriteLine("");
            Console.WriteLine("jadii pertama-tama masukkan elemen Arraynya di tiap baris Elemen");
            Console.WriteLine("Masukkan jumlah elemen array: ");
            int BarisArray = int.Parse(Console.ReadLine());
            int[] Array = new int[BarisArray];
            for (int i = 0; i < BarisArray; i++)
            {
                Console.WriteLine($"Masukkan elemen ke-{i + 1}:");
                Array[i] = int.Parse(Console.ReadLine());
            }
            while (true)
            {
                Console.WriteLine("");
                Console.WriteLine("ini menunyaa:");
                Console.WriteLine("1. Urutkan Array (otomatis)");
                Console.WriteLine("2. Tukar Posisi Elemen");
                Console.WriteLine("3. Tambahkan Elemen ke dalam Indeks baru");
                Console.WriteLine("4. Keluar");
                Console.WriteLine("Silakan di pilih yaww dengan cara inputkan sesuai nomernya (1, 2, 3 atau 4) (>///<): ");
                string InputanUser = Console.ReadLine();
                Console.WriteLine("");
                switch (InputanUser)
                {
                    case "1":
                        BubbleSort(Array, 0, Array.Length - 1);
                        TampilkanArray("Mantappu JIWA!, ini adalah Array setalah diurutkan: ", Array);
                        break;
                    case "2":
                        int IndeksPertama, IndeksTerakhir;
                        PilihdanTukarkan(out IndeksPertama, out IndeksTerakhir);

                        if (IndeksValidnya(Array, IndeksPertama) && IndeksValidnya(Array, IndeksPertama))
                        {
                            TukarElemen(Array, IndeksPertama, IndeksTerakhir);
                            TampilkanArray("kerenn, kamu telah menukarkan posisi Elemen Arraynyaa, berikut Array setelah ditukarkan: ", Array);
                        }
                        else
                        {
                            Console.WriteLine("yahh input kamu tidak valid, coba lagi yaww");
                        }
                        break;
                    case "3":
                        int NilaiBaru;
                        Console.WriteLine("kamu mau masukkin nilai baru, silakann berapa nilai yang kamu mau untuk ditambahkan?: ");
                        NilaiBaru = int.Parse(Console.ReadLine());

                        Array = TambahkanElemen(Array, NilaiBaru);
                        TampilkanArray("WAHH nilai yang bagus, ini adalah Array sekarang.. setelah kamu tambahkan tadi: ", Array);
                        break;
                    case "4":
                        return;
                    default:
                        Console.WriteLine("yahh pilihan kamu tidak valid:(, tapi gapapa coba lagi yukk!");
                        break;
                }
            }
        }
        static void BubbleSort(int[] Array, int IndeksPertama, int IndeksTerakhir)
        {
            bool Tukarkan;
            do
            {
                Tukarkan = false;
                for (int i = IndeksPertama; i < IndeksTerakhir; i++)
                {
                    if (Array[i] > Array[i + 1])
                    {
                        TukarElemen(Array, i, i + 1);
                        Tukarkan = true;
                    }
                }
            } while (Tukarkan);
        }
        static bool Urutkan(int[] Array, int IndeksPertama, int IndeksTerakhir)
        {
            if (IndeksPertama > IndeksTerakhir)
            {
                int TempatBarisElemen = IndeksPertama;
                IndeksPertama = IndeksTerakhir;
                IndeksTerakhir = TempatBarisElemen;
            }
            for (int i = IndeksPertama; i < IndeksTerakhir; i++)
            {
                if (Array[i] > Array[i + 1])
                {
                    return false;
                }
            }
            return true;
        }
        static void TampilkanArray(string Pesan, int[] Array)
        {
            Console.WriteLine(Pesan);
            foreach (int Angka in Array)
            {
                Console.Write(Angka + " ");
            }
            Console.WriteLine();
        }
        static void TukarElemen(int[] Array, int i, int j)
        {
            int TempatBarisElemen = Array[i];
            Array[i] = Array[j];
            Array[j] = TempatBarisElemen;
        }
        static bool IndeksValidnya(int[] Array, int index)
        {
            if (index >= 0 && index < Array.Length)
            {
                return true;
            }
            else
            {
                return false;
            }
        }
        static void PilihdanTukarkan(out int IndeksPertama, out int IndeksTerakhir)
        {
            Console.WriteLine("Masukkan indeks awalnya yaa dimulai dari angka 0 (karena indeks 0 adalah baris elemen pertamanya): ");
            IndeksPertama = int.Parse(Console.ReadLine());

            Console.WriteLine("Masukkan indeks akhirnya jugaa: ");
            IndeksTerakhir = int.Parse(Console.ReadLine());
        }
        static int[] TambahkanElemen(int[] Array, int NilaiBaru)
        {
            int[] ArrayBaru = new int[Array.Length + 1];
            Array.CopyTo(ArrayBaru, 0);
            ArrayBaru[Array.Length] = NilaiBaru;
            return ArrayBaru;
        }
    }
}