Как корректно сделать сортировку списка?
Есть вот такой вот интерфейс. В нем определил функцию сортировки, которая должна сортировать имена по первой букве. Это односвязный линейный список, подскажите пожалуйста как правильно написать функцию сортировки , правильно переставляя указатели?
#pragma once
#include <string>
using namespace std;
class NOTE
{
private:
string name;//Имя Фамилия
string phone;//Номер телефона
string birthday;//Дата рождения
public:
NOTE();//Конструктор по умолчанию
NOTE(string n, string p, string b);//Конструктор
string GetName();//Получение значения имени
string GetPhone();//Получение значения номера телефона
string GetBirthdat();//Получение значения дня рождения
void SetName(string n);//Установка Имени
void SetPhone(string p);//Установка номера телефона
void SetBirthday(string b);//Установка Дня Рождения
};
#pragma once
#include "Note.h"
class Node//Класс узла
{
friend class Contact;//Делаем класс дружественным для класса Contact
private:
Node(NOTE data, Node* next = nullptr) // конструктор ноды присваивание значения и адреса
{
this->data = data;//Указатель на данные
this->next = next;//Указатель на следующий элемент
};
NOTE data; // Поле данных, содержащее данные типа NOTE
Node* next; // Указатель на следующий элемент
public:
};
#pragma once
#include "Note.h"
#include "Node.h"
class Contact
{
private:
int Size;//Рамзер списка
Node* head; //Голова списка первый элемент
public:
Contact();
~Contact();
int GetSize() { return Size; };//Получение размера списка
void DeleteHead();//Удаление первого элемента
void DeleteElem(int index);//Удаление любого из элементов, кроме первого
void AddElem(NOTE data); //Добавление элемента в конец списка
void Сlear();//Очистка списка
NOTE& operator[] (const int index);//Поиск элемента по индексу
void Sortt(int choice);//Сортировка элементов
int wordtonum(string fword);
};
Попытался сам написать методом пузрька, но ничего не вышло. Дайте мысль)
void Contact::Sortt(int choice)
{
Node*a=head;
Node* b = NULL;
Node* c = NULL;
int h = 0;
for (int i = 0; i < Size - 1; i++)
for (int j = 0; j < Size - i - 1; j++)
{
if (a->data.GetName()[h] > a->next->data.GetName[h])
{
b = a->next;//2 элемент
}
}
}