быстрая сортировка списка!!!
не работает почему то, хелп плиз вот код!
Код:
include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <malloc.h>
#include <conio.h>
struct flower
{
flower *pred;
char kateg[12];
char naim[12];
int stoim;
flower *next;
};
struct flower *p, *begin, *end;
int n;
void q_sort (struct flower *left)
{
struct flower *pilot, *l_hold, *r_hold, *test, *next, *pred, *right;
right=end;
l_hold=left;
r_hold=right;
pilot=left;
while ((left->next)!=right) //левый < правый
{
while ((strcmp(right->naim, pilot->naim)>=0)&&(left->next!=right))
right=right->pred;
if ((left->next!=right->next)&&(left->next!=NULL))
{
test=left;
strcpy(left->naim, right->naim);
strcpy(right->naim, test->naim);
left=left->next;
}
while ((strcmp(left->naim, pilot->naim)<=0)&&(left->next!=right))
left=left->next;
if ((left->next!=right->next)&&(right->pred!=NULL))
{
test=left;
strcpy(left->naim, right->naim);
strcpy(right->naim, test->naim);
right=right->pred;
}
}
test=left;
next=left->next;
pred=left->pred;
left->next=pilot->next;
left->pred=pilot->pred;
pilot->next=next;
pilot->pred=pred;
pilot=test;
left=l_hold;
right=r_hold;
//if (left->next!=pilot)
q_sort(left->next);
//if (right->pred!=pilot)
//q_sort(pilot->next, right);
}
/*void QuickSort()
{
q_sort(begin);
}*/
void main()
{//1
system ("chcp 1251");
system ("cls");
int i=0, flag1=1, flag2;
char name[15];
begin=NULL;
printf ("Ввод данных:\n");
while (flag1==1)
{//2
p=(struct flower*)malloc(sizeof(struct flower));
p->pred=NULL;
p->next=begin;
begin=p;
printf ("\nВведите категорию: ");
scanf ("%s", p->kateg);
printf ("\nВведите наименование: ");
scanf ("%s", p->naim);
printf ("\nВведите стоимость: ");
scanf ("%d", &p->stoim);
printf ("\n1 - Продолжение ввода\n2 - Окончание ввода");
printf ("\t\nВаш выбор: ");
scanf("%d", &flag1);
}//2
printf ("\n1 - Вывод списка");
printf ("\n2 - Сортировка списка по алфавиту\nВаш выбор: ");
scanf ("%d", &flag2);
if(flag2==1)
{
p=begin;
while(p!=NULL)
{
printf("\nКатегория: %s", p->kateg);
printf("\nНаименование: %s", p->naim);
printf("\nСтоимость: %d", p->stoim);
p=p->next;
}
printf ("\nНажмите любую клавишу для сортировки списка");
getch();
}
p=begin;
while (p->next!=NULL)
p=p->next;
end=p;
p=begin;
if (p->next!=NULL)
q_sort(begin);
//QuickSort();
printf ("\n\n\tОтсортированный по наименованию список:\n");
while(p!=NULL)
{
printf("\nНаименование: %s", p->naim);
printf("\nКатегория: %s", p->kateg);
printf("\nСтоимость: %d", p->stoim);
p=p->next;
}
getchar();
getchar();
} //1