Пузырьковая сортировка

Этот метод является одним из возможных вариантов сортировки обменом. Сортировка обменом заключается в том, что сначала просматривается весь массив в поисках максимального значения. Этот элемент перемещается в конец массива. Затем происходит поиск с начала массива до отсортированной части, и максимальный элемент снова перемещается в отсортированную часть массива.

Пузырьковая сортировка основана на сравнении двух соседних элементов. Если элемент слева больше, чем справа, они меняются местами. Для реализации алгоритма понадобятся 2 цикла: первый проходит весь массив от начала до конца, а второй — внутренний — проходит массив сначала и до отсортированной части. Таким образом, одна итерация внутреннего цикла ставит на место только один элемент. Он будет последним элементом массива. Внутри этого цикла и осуществляется сравнение пар соседних элементов.

Асимптотическая сложность алгоритма — O(N2).

Далее приводится реализация алгоритма пузырьковой сортировки на разных языках программирования.

#include <stdio.h>
#include <stdlib.h>

void exchange_bubble_sort(int ar[], int length)
{
	for (int i = 1; i < length; i++) { for (int j = length - 1; j >= i; j--) {
			if (ar[j - 1] > ar[j]) {
				int temp = ar[j - 1];
				ar[j - 1] = ar[j];
				ar[j] = temp;
			}
		}
	}
}

int main(void)
{
	int length = sizeof(arr) / sizeof(*arr);

	show("Array: ", arr, length);

	exchange_bubble_sort(arr, length);

	show("Sorted array: ", arr, length);

	return 0;
}
internal class Program
{
    static void ExchangeBubbleSort(T[] arr) where T:IComparable
    {
        int length = arr.Length;
        
        for(int j=0; j<length; j++)
        {
            for(int i=0; i<length-j-1; i++)
            {
                if (arr[i].CompareTo(arr[i+1])==1)
                {
                    T temp = arr[i];
                    arr[i] = arr[i+1];
                    arr[i+1] = temp;
                }
            }
        }
    }

    static void Main(string[] args)
    {
        int[] arr = { 12, 5, 4, 9, 8, 10, 0, 2, 1, 3, -1 };
        
        Console.WriteLine($"Array: {string.Join(" ", arr)}");

        ExchangeBubbleSort(arr);

        Console.WriteLine($"Sorted array: {string.Join(" ", arr)}");

        
        Console.ReadKey();
    }
}
<?php
function ExchangeBubbleSort(array &$arr) {
    $length=count($arr);

    for($i=1; $i<$length; $i++) { for($j=$length-1; $j>=$i; $j--) {
            if ($arr[$j-1]>$arr[$j]) {
                $temp=$arr[$j-1];
                $arr[$j-1]=$arr[$j];
                $arr[$j]=$temp;
            }
        }
    }
}
function exchangeBubbleSort(arr) {
    if (Array.isArray(arr)) {
       const len=arr.length;

       for(let i=1; i<len; i++) { for(let j=len-1; j>=i; j--) {
             if (arr[j-1]>arr[j]) {
                let temp=arr[j-1];
                arr[j-1]=arr[j];
                arr[j]=temp;
             }
          }
       }
    }
    else {
        throw new Error("Argument must be of type Array");
    }
}