В общей сложности сделал еще и сортировку выбором.
Вот так сортируется двунаправленный список методом выбора.
C++ |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
| int sort(myList* &top,myList* &endl,int key)
{//сортировка Выбором
myList* sort; // элемент для того, чтобы запоминать отсортированные элементы
myList* big; // переменная для хранения или самого большого элемента, или наоборот
myList* temp; // временная переменная, ней мы пробегаем по циклам
temp = big = top; // начальные значения
sort = NULL;
while (big!=NULL) // пока у нас есть не отсортированные элементы
{
big=temp; // запоминаем наименший элемент как первый из неотсорт списка
if(big!=NULL) //проверка последнего прохода
{
while (temp!=NULL)
{
switch(key)
{ //проверка по ключу //поиск минимального элемента
case 1://по фамилии
if (strcmp(temp->data.Fio,big->data.Fio)<0) big=temp;break;
case 2://по таб. номеру
if (temp->data.tabNum < big->data.tabNum) big=temp;break;
case 3://по году рождения
if (temp->data.age < big->data.age) big=temp;break;
case 4://по участку
if (temp->data.num_sector < big->data.num_sector) big=temp;break;
}
temp=temp->forward;//следующий элемент
}
if (big->back!=NULL)
big->back->forward=big->forward; // отчленение минимального из списка
if (big->forward!=NULL)
big->forward->back=big->back;
if (sort!=NULL)
{
big->forward=sort->forward; // так вставляем если уже есть
sort->forward=big; // сортированный список
big->back=sort;
if(big->forward!=NULL) // для последнего элемента,
{ // чтобы не присваивать пустоте значения
big->forward->back=big;
}
sort=big; //запомиманем конец отсортированного списка
}
else // если первый элемент отсортированного
{
if (big!=top) big->forward=top;
big->back=NULL;
big->forward->back=big;
top=sort=big; // запоминаем указатели на конец и
} // начала нового сортированного списка
temp=big->forward; // передвигаем указатель на начало не сорт списка
}
}
temp=top;
while(temp!=NULL)
{
endl=temp;
temp=temp->forward;
} //находим последний элемент
return 1;
} |
|
Может быть кому-нибудь пригодится.