Файл: Поиск и сортировка данных в массивах.doc

ВУЗ: Не указан

Категория: Не указан

Дисциплина: Не указана

Добавлен: 05.12.2023

Просмотров: 12

Скачиваний: 1

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

Тема: поиск и сортировка данных в массивах.

Методы сортировки элементов массива

Сортировка пузырьком.

При данной сортировке (в порядке возрастания) нужно последовательно сравни­вать значения соседних элементов и менять числа местами, если предыдущее оказывается больше последующего. Таким образом, элементы с большими значениями оказываются в конце списка, а с меньшими остаются в начале.

Пример. Пусть исходный массив имеет вид: . Отсортируем его в порядке возрастания:





Сортировка перемешиванием (шейкерная сортировка).

Шейкерная сортировка отличается от пузырьковой тем, что она двунаправленная: алгоритм перемещается не строго слева направо, а сначала слева направо, затем справа на-лево.



Сортировка выбором

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



Методы поиска элемента в массиве

Бинарный поиск

Данный вид поиска применяется в отсортированном массиве.

  1. Определение значения элемента в середине структуры данных. Полученное значе-ние сравнивается с ключом.

  2. Если ключ меньше значения середины, то поиск осуществляется в первой половине элементов, иначе — во второй.

  3. Поиск сводится к тому, что вновь определяется значение серединного элемента в выбранной половине и сравнивается с ключом.

  4. Процесс продолжается до тех пор, пока не будет найден элемент со значением клю-ча или не станет пустым интервал для поиска.


Ключ - искомый элемент массива. Предположим, искомый элемент равен 3,тогда



Линейный, последовательный поиск (перебор, сквозной поиск)

Исследования начинаются с первого элемента массива. Если искомое значение не равно значению ключа, то осуществляется переход к следующему значению. То есть в результате каждой проверки количество проверяемых элементов уменьшается на один.

Итоговая работа «Исследование алгоритмов сортировки и поиска данных в массивах».

Необходимо разработать и реализовать программы сортировки заданного число­вого массива действительных чисел, находящегося в файле на диске приведенными выше методами. Файл можно создать, используя блокнот, разделяя числа пробелами. Для каж-дого метода найти и вывести на экран количество операций сравнения, требуемых при его реализации. Отсортированный массив вывести в дисковый файл (ис­ходный файл сохраняется!). Исходный файл состоит из 20 положительных, отрицательных и нулевых элементов. Кроме отчета необходимо выслать исходный и отсортированный файлы.

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

Приложение.

Организация ввода (вывода) элементов массива из файла (в файл).

#include

#include
using namespace std;
void bubbleSort(double arr[], int n, int& compCount) {

bool swapped;

for (int i = 0; i < n - 1; i++) {

swapped = false;

for (int j = 0; j < n - i - 1; j++) {

compCount++;

if (arr[j] > arr[j + 1]) {

swap(arr[j], arr[j + 1]);

swapped = true;

}

}

if (!swapped) {

break;

}

}

}
void selectionSort(double arr[], int n, int& compCount) {

int minIndex;

for (int i = 0; i < n - 1; i++) {

minIndex = i;

for (int j = i + 1; j < n; j++) {

compCount++;

if (arr[j] < arr[minIndex]) {

minIndex = j;

}

}

if (minIndex != i) {

swap(arr[i], arr[minIndex]);

}

}

}
void shuffleSort(double arr[], int n, int& compCount) {

srand(time(NULL));

for (int i = n - 1; i > 0; i--) {

int j = rand() % (i + 1);

swap(arr[i], arr[j]);

compCount++;

}

bubbleSort(arr, n, compCount);

}
void binarySearch(double arr[], int n, double x, int& compCount, int& index) {

int l = 0, r = n - 1;

while (l <= r) {

int mid = (l + r) / 2;

compCount++;

if (arr[mid] == x) {

index = mid;

return;

}

else if (arr[mid] < x) {

l = mid + 1;

}

else {

r = mid - 1;

}

}

}
void linearSearch(double arr[], int n, double x, int& compCount, int& index) {

for (int i = 0; i < n; i++) {

compCount++;

if (arr[i] == x) {

index = i;

return;

}

}

}
int main() {

const int SIZE = 20;

double arr[SIZE];

ifstream inputFile("input.txt");

for (int i = 0; i < SIZE; i++) {

inputFile >> arr[i];

}

inputFile.close();

int compCount = 0;

bubbleSort(arr, SIZE, compCount);

ofstream outputFile("output_bubble.txt");

for (int i = 0; i < SIZE; i++) {

outputFile << arr[i] << " ";

}

outputFile.close();

cout << "Сортировка пузырьком: " << compCount << endl;

compCount = 0;

selectionSort(arr, SIZE, compCount);

outputFile.open("output_selection.txt");

for (int i = 0; i < SIZE; i++) {

outputFile << arr[i] << " ";

}

outputFile.close();

cout << "Сортировка выбором: " << compCount << endl;

compCount = 0;

shuffleSort(arr, SIZE, compCount);

outputFile.open("output_shuffle.txt");

for (int i = 0; i < SIZE; i++) {

outputFile << arr[i] << " ";

}

outputFile.close();

}



Рис.1 Исходный файл input.txt



Рис.2 Отсортированные файлы output_.txt