Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 25.05.2010, 21:41   #1
KIrich iz Che
Пользователь
 
Аватар для KIrich iz Che
 
Регистрация: 29.03.2010
Сообщений: 19
По умолчанию сортировка, найти ошибку надо(

быстрая сортировка списка!!!
не работает почему то, хелп плиз вот код!

Код:
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
KIrich iz Che вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Таймер обратного отсчета работает не так как надо.. нужно найти ошибку в коде... Человек_Борща Общие вопросы Delphi 10 13.04.2010 20:06
Ребят,надо найти ошибку vovey Помощь студентам 7 28.03.2010 12:40
сортировка массива в си++(очень надо) natasha971929 Помощь студентам 0 16.12.2009 21:40
сортировка массивка. исправить ошибку Ananim-Pbl6ak Паскаль, Turbo Pascal, PascalABC.NET 0 16.06.2009 08:28
Сортировка,созданием функции в ВБА.оч надо. fa777 Microsoft Office Excel 3 21.05.2009 16:42