Главная страница
Навигация по странице:

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

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

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

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

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

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

  • Поиск и сортировка данных в массивах


    Скачать 52.65 Kb.
    НазваниеПоиск и сортировка данных в массивах
    Дата09.05.2023
    Размер52.65 Kb.
    Формат файлаdoc
    Имя файлаpoisk.doc
    ТипДокументы
    #1116922

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

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

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

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

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





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

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



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

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



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

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

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

    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


    написать администратору сайта