Построить класс для работы с односвязным списком. Элементы списка – целые числа. Сформировать список, упорядочить элементы списка по возрастанию, используя сортировку: a) методом выбора; б) методом пузырька; в) методом вставки. C++
cpp
#include <iostream>
using namespace std;
class Node {
public:
int data;
Node* next;
Node(int d) {
data = d;
next = NULL;
}
};
class LinkedList {
public:
Node* head;
LinkedList() {
head = NULL;
}
void insert(int d) {
Node* newNode = new Node(d);
if (head == NULL) {
head = newNode;
}
else {
Node* temp = head;
while (temp->next != NULL) {
temp = temp->next;
}
temp->next = newNode;
}
}
void display() {
Node* temp = head;
while (temp != NULL) {
cout << temp->data << " ";
temp = temp->next;
}
}
void swap(Node* a, Node* b) {
int temp = a->data;
a->data = b->data;
b->data = temp;
}
void selectionSort() {
Node* temp1 = head;
while (temp1 != NULL) {
Node* minNode = temp1;
Node* temp2 = temp1->next;
while (temp2 != NULL) {
if (temp2->data < minNode->data) {
minNode = temp2;
}
temp2 = temp2->next;
}
if (minNode != temp1) {
swap(minNode, temp1);
}
temp1 = temp1->next;
}
}
void bubbleSort() {
Node* temp1 = head;
while (temp1 != NULL) {
Node* temp2 = head;
while (temp2->next != NULL) {
if (temp2->data > temp2->next->data) {
swap(temp2, temp2->next);
}
temp2 = temp2->next;
}
temp1 = temp1->next;
}
}
void insertionSort() {
Node* temp1 = head;
while (temp1 != NULL) {
Node* temp2 = temp1;
while (temp2 != head && temp2->data < temp2->next->data) {
swap(temp2, temp2->next);
temp2 = temp2->next;
}
temp1 = temp1->next;
}
}
};
int main() {
LinkedList list;
list.insert(3);
list.insert(6);
list.insert(1);
list.insert(4);
list.insert(2);
cout << "Original List: ";
list.display();
cout << endl;
list.selectionSort();
cout << "Selection Sorted List: ";
list.display();
cout << endl;
list.bubbleSort();
cout << "Bubble Sorted List: ";
list.display();
cout << endl;
list.insertionSort();
cout << "Insertion Sorted List: ";
list.display();
cout << endl;
return 0;
}
В этом классе есть два внутренних класса: `Node` и `LinkedList`. `Node` является базовым элементом нашего списка и содержит данные и указатель на следующий элемент в списке. Элементы списка формируются путем добавления нового элемента с помощью метода `insert`.
Методы `selectionSort`, `bubbleSort` и `insertionSort` реализуют алгоритмы сортировки, соответствующие своим названиям. В каждом из этих методов мы выполняем цикл по элементам списка и сравниваем значения, перемещаяся по списку в зависимости от результата сравнения. Если мы обнаружим, что элементы расположены в неправильном порядке, мы поменяем их местами с помощью метода `swap`.
В методе `display` мы просто перебираем список, начиная с головы, и выводим каждый элемент.
Эти методы можно применять к списку после того, как он был сформирован и заполнен значениями. В приведенном примере список заполняется значениями 3, 6, 1, 4 и 2 и затем сортируется тремя разными методами, чтобы продемонстрировать различные алгоритмы сортировки. Последний метод `insertionSort` отсортировал список в порядке возрастания.Нажимая «Регистрация» или «Войти через Google», вы соглашаетесь с Публичной офертой, даете Согласие на обработку персональных данных, а также подтверждаете что вам есть 18 лет
Нажимая «Регистрация» или «Войти через Google», вы соглашаетесь с Публичной офертой, даете Согласие на обработку персональных данных, а также подтверждаете что вам есть 18 лет