Существует множество методов сортировки данных, которые применяются в различных языках программирования. Вот некоторые из основных методов сортировки и их реализации:
1. Сортировка пузырьком (Bubble Sort)
Это простой, но неэффективный метод сортировки. Проходит через массив и сравнивает пары элементов, меняя их местами, если они не в порядке.
Пример реализации на Python:
def bubble_sort(arr):
n = len(arr)
for i in range(n):
for j in range(0, n-i-1):
if arr[j] > arr[j+1]:
arr[j], arr[j+1] = arr[j+1], arr[j]
return arr
numbers = [64, 34, 25, 12, 22, 11, 90]
print(bubble_sort(numbers))
2. Сортировка выбором (Selection Sort)
Последовательно находит наименьший (или наибольший) элемент и помещает его на нужную позицию.
Пример реализации на Java:
public class SelectionSort {
public static void sort(int[] arr) {
int n = arr.length;
for (int i = 0; i < n-1; i++) {
int min_idx = i;
for (int j = i+1; j < n; j++) {
if (arr[j] < arr[min_idx]) {
min_idx = j;
}
}
int temp = arr[min_idx];
arr[min_idx] = arr[i];
arr[i] = temp;
}
}
}
3. Быстрая сортировка (Quick Sort)
Это рекурсивный метод, который выбирает «опорный» элемент и разделяет массив на две части, одна из которых содержит элементы меньше опорного, а другая — больше.
Пример реализации на C++:
#include <iostream>
using namespace std;
void swap(int* a, int* b) {
int t = *a;
*a = *b;
*b = t;
}
int partition(int arr[], int low, int high) {
int pivot = arr[high];
int i = (low - 1);
for (int j = low; j <= high - 1; j++) {
if (arr[j] < pivot) {
i++;
swap(&arr[i], &arr[j]);
}
}
swap(&arr[i + 1], &arr[high]);
return (i + 1);
}
void quickSort(int arr[], int low, int high) {
if (low < high) {
int pi = partition(arr, low, high);
quickSort(arr, low, pi - 1);
quickSort(arr, pi + 1, high);
}
}
4. Сортировка слиянием (Merge Sort)
Это также рекурсивный метод, который разделяет массив на две части, сортирует их и затем сливает обратно.
Пример реализации на JavaScript:
function merge(left, right) {
let resultArray = [], leftIndex = 0, rightIndex = 0;
while (leftIndex < left.length && rightIndex < right.length) {
if (left[leftIndex] < right[rightIndex]) {
resultArray.push(left[leftIndex]);
leftIndex++;
} else {
resultArray.push(right[rightIndex]);
rightIndex++;
}
}
return resultArray.concat(left.slice(leftIndex)).concat(right.slice(rightIndex));
}
function mergeSort(array) {
if (array.length <= 1) {
return array;
}
const middleIndex = Math.floor(array.length / 2);
const leftArray = array.slice(0, middleIndex);
const rightArray = array.slice(middleIndex);
return merge(mergeSort(leftArray), mergeSort(rightArray));
}
5. Сортировка вставками (Insertion Sort)
Проходит по элементам массива и вставляет их на правильные позиции относительно уже отсортированных элементов.
Пример реализации на Python:
def insertion_sort(arr):
for i in range(1, len(arr)):
key = arr[i]
j = i - 1
while j >= 0 and key < arr[j]:
arr[j + 1] = arr[j]
j -= 1
arr[j + 1] = key
return arr
numbers = [12, 11, 13, 5, 6]
print(insertion_sort(numbers))
Каждый из этих методов имеет свои преимущества и недостатки и подходит для различных ситуаций. Например, быстрая сортировка обычно быстрее на больших массивах, но сортировка вставками может быть эффективнее на небольших наборах данных.