Продвинутые операции с массивами
На этом этапе мы рассмотрим некоторые продвинутые операции, которые можно выполнять с массивами, такие как поиск максимального и минимального значений, а также сортировка массива. Эти техники являются важными для анализа данных, обработки и реализации алгоритмов.
Напишем программу для поиска максимального и минимального значений в массиве:
cd ~/project
touch find_max_min.c
#include <stdio.h>
int main() {
int numbers[5] = {10, 20, 30, 40, 50};
int max = numbers[0];
int min = numbers[0];
for (int i = 1; i < 5; i++) {
if (numbers[i] > max) {
max = numbers[i];
}
if (numbers[i] < min) {
min = numbers[i];
}
}
printf("Maximum value: %d\n", max);
printf("Minimum value: %d\n", min);
return 0;
}
Этот код демонстрирует простую, но мощную технику для поиска максимального и минимального значений в массиве. Инициализируя max
и min
первым элементом массива и затем сравнивая каждый последующий элемент, мы можем эффективно определить экстремальные значения в массиве.
Основные строки кода:
- Инициализация:
int max = numbers[0]; int min = numbers[0];
- Переменные max
и min
инициализируются первым элементом массива. Этот шаг предоставляет начальную точку для сравнения.
- Цикл сравнения:
for (int i = 1; i < 5; i++)
- Этот цикл for
начинается с индекса 1 (второй элемент) и продолжается до конца массива. Это гарантирует, что каждое последующее значение проверяется по сравнению с существующими значениями max
и min
.
- Поиск максимума:
if (numbers[i] > max) { max = numbers[i]; }
- Этот блок проверяет, является ли текущий элемент больше текущего max
. Если это так, переменная max
обновляется значением текущего элемента.
- Поиск минимума:
if (numbers[i] < min) { min = numbers[i]; }
- Аналогично, этот блок проверяет, является ли текущий элемент меньше текущего min
, и обновляет min
, если найдено меньшее значение.
Далее напишем программу для сортировки массива по возрастанию с использованием алгоритма пузырьковой сортировки (bubble sort):
cd ~/project
touch bubble_sort.c
#include <stdio.h>
void bubbleSort(int arr[], int n) {
for (int i = 0; i < n-1; i++) {
for (int j = 0; j < n-i-1; j++) {
if (arr[j] > arr[j+1]) {
int temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
}
}
}
}
int main() {
int numbers[5] = {50, 20, 30, 10, 40};
bubbleSort(numbers, 5);
printf("Sorted array:\n");
for (int i = 0; i < 5; i++) {
printf("numbers[%d] = %d\n", i, numbers[i]);
}
return 0;
}
Пузырьковая сортировка - это классический алгоритм сортировки, который многократно проходит по списку, сравнивает соседние элементы и меняет их местами, если они находятся в неправильном порядке. Хотя это не самый эффективный метод сортировки для больших наборов данных, он представляет собой отличное введение в концепции сортировки и манипуляции массивами.
Основные строки кода:
- Внешний цикл:
for (int i = 0; i < n-1; i++)
- Этот внешний цикл контролирует количество проходов по массиву. Цикл выполняется до n - 1
раз (где n
- размер массива), так как наибольший элемент будет находиться в своей конечной позиции после каждого прохода.
- Внутренний цикл:
for (int j = 0; j < n-i-1; j++)
- Внутренний цикл выполняет фактические сравнения и обмены. По мере того, как наибольшие элементы "всплывают" в конец, диапазон внутреннего цикла уменьшается, поэтому мы используем n - i - 1
вместо n
.
- Сравнение:
if (arr[j] > arr[j+1])
- Это утверждение проверяет, является ли текущий элемент больше следующего элемента.
- Обмен: Строки
int temp = arr[j]; arr[j] = arr[j+1]; arr[j+1] = temp;
выполняют обмен двух элементов, когда arr[j]
больше arr[j+1]
. Временная переменная temp
используется, чтобы не потерять одно из значений при обмене.
Для компиляции и запуска программ используйте следующие команды в терминале:
gcc find_max_min.c -o find_max_min
./find_max_min
gcc bubble_sort.c -o bubble_sort
./bubble_sort
Пример вывода для поиска максимума и минимума:
Maximum value: 50
Minimum value: 10
Пример вывода для сортировки:
Sorted array:
numbers[0] = 10
numbers[1] = 20
numbers[2] = 30
numbers[3] = 40
numbers[4] = 50
Эти примеры иллюстрируют основные операции с массивами, которые являются строительными блоками более сложных техник обработки данных в программировании на языке C.