Объясните каждую строчку кода BubbleSort?

Вы можете прокоментировать подробно этот код пузырьковой сортировки. Объяснить каждую строчку, я очень хочу понять этот-то, если есть более современный вариант этого кода, буду рад увидеть, более красивый раскоментированный код.

using System;

namespace sort
{
    class Program
    {
        static int[] BubbleSort(int[] mas)
        {
            int temp;
            for (int i = 0; i < mas.Length - 1; i++)
            {
                for (int j = 0; j < mas.Length - i - 1; j++)
                {
                    if (mas[j + 1] < mas[j])
                    {
                        temp = mas[j + 1];
                        mas[j + 1] = mas[j];
                        mas[j] = temp;
                    }
                }
            }
            return mas;
        }
        
        static void Main(string[] args)
        {
            int[] mass = { 12, 7, 8, 1 };
            var rez = BubbleSort(mass);
            foreach(int c in rez)
            {
                Console.WriteLine(c);
            }
        }
    }
}

А именно эта часть кода мне больше интересна для понимание

int temp;
            for (int i = 0; i < mas.Length - 1; i++)
            {
                for (int j = 0; j < mas.Length - i - 1; j++)
                {
                    if (mas[j + 1] < mas[j])
                    {
                        temp = mas[j + 1];
                        mas[j + 1] = mas[j];
                        mas[j] = temp;
                    }
                }
            }
            return mas;
        }

Ответы (1 шт):

Автор решения: Aziz Umarov

Я так понимаю вы должны объяснить код

int temp; // объявление переменной temp будет использоваться промежуточным буфером для хранения значения
for (int i = 0; i < mas.Length - 1; i++) // объявление mas.Length - 1 повторений цикла с шагом 1 по переменной i
{
    for (int j = 0; j < mas.Length - i - 1; j++) // объявление mas.Length - 1 - i повторений цикла с шагом 1 по переменной j
    {
        if (mas[j + 1] < mas[j]) // сверка элементов [j + 1] и [j] массива mas
        {
            temp = mas[j + 1]; // сохранение в буфер (переменную) temp значение элемента [j + 1] массива mas 
            mas[j + 1] = mas[j]; // замена значения элемента [j + 1] элементом [j] массива mas
            mas[j] = temp; // замена значения элемента [j] массива mas значением temp
        }
    }
}
return mas; // возврат результирующего массива

где

{ // начало блока
} // конец блока 
→ Ссылка