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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 20.12.2009, 23:58   #1
Evgeshk@
Новичок
Джуниор
 
Регистрация: 14.12.2008
Сообщений: 1
По умолчанию Внешняя сортировка.

Здравствуйте. Помогите пожалуйста. Не работает двухфазная сортировка простым слиянием. Вот код:
Код:
#include "stdafx.h"
#include <windows.h>
#include <string>
#include <conio.h>
#include <time.h>
#include<iostream>
using namespace std;
char __s[100];
char *OEM(char *s)
{
	AnsiToOem(s,__s);
	return &__s[0];
}
int n,k;
void File_vivod(FILE *f)
{
int x;
while (fread (&x,sizeof(int),1,f))
cout<<x<<' ';cout<<'\n';
}
//******************************************
void Fcopy (FILE *in,FILE *out)
{
int x;
while (fread (&x,sizeof(int),1,out))
  fwrite(&x,sizeof(int),1,in);
}
//******************************************
void create_file()
{
	FILE *a;
	cout<<OEM("Введите количество символов ");
	cin>>n;
	int x;
	a=fopen("main.txt","wb");
	for (int i=0;i<n;i++)
	{
	x=rand()%100;
	fwrite(&x,sizeof(int),1,a);
	}
fclose (a);
fopen("main.txt","rb");
cout<<OEM("Исходный массив ")<<'\n';File_vivod(a);
fclose (a);
}
//******************************************
void refile()
{
	FILE *beg,*a;
    beg=fopen("main.txt","rb");  
    a=fopen("File.txt","wb");
	Fcopy(a,beg);
	fclose (beg);
	fclose (a);
}

//******************************************
void razbienie(FILE *ish,FILE *b,FILE *c,int kol_v_gruppah)
{
	bool a_b=1;
	int x,i=0;
	cout<<OEM("Разбиение")<<'\n';
while (fread (&x,sizeof(int),1,ish))
    {
	if(a_b)
	{
		fseek(ish,sizeof(int)*(-1),SEEK_CUR);
		for(i=0;i<kol_v_gruppah;i++)
		{
		if(fread (&x,sizeof(int),1,ish))
		fwrite(&x,sizeof(int),1,b);
     	}
		a_b=0;
	}
	else
	{
        fseek(ish,sizeof(int)*(-1),SEEK_CUR);
		for(i=0;i<kol_v_gruppah;i++)
		{
		if(fread (&x,sizeof(int),1,ish))
		fwrite(&x,sizeof(int),1,c);
		}
		a_b=1;
	}
  }
}
//******************************************
void sliyanie(FILE *ish,FILE *b,FILE *c,int kol_v_gruppah)
{
	int x,y,i=0,j=0,kol_proh=0,b_per=0,c_per=0;
	kol_proh=(n+(kol_v_gruppah*2)-1)/(kol_v_gruppah*2);
	cout<<OEM("Слияние ")<<'\n';
	cout<<OEM("Количество проходов ")<<kol_proh<<'\n';
	cout<<OEM("Количество в группах ")<<kol_v_gruppah<<'\n';
	for(i=0;i<kol_proh;i++)
	{
		b_per=0;c_per=0;
		while((b_per<kol_v_gruppah)&&(c_per<kol_v_gruppah))
		{
			if(!fread(&y,sizeof(int) ,1,c))
			{	c_per=kol_v_gruppah;
				break;
			}
			fread(&x,sizeof(int),1,b);
			if(x>=y)
			{
			fwrite(&y,sizeof(int) ,1,ish);
			 fseek(b,sizeof(int)*(-1),SEEK_CUR);
			c_per++;
			}
			else
			{
			fwrite(&x,sizeof(int),1,ish);
			 fseek(c,sizeof(int)*(-1),SEEK_CUR);
			b_per++;
			}
		}
		while(b_per!=kol_v_gruppah)
			{
				if(fread(&y,sizeof(int) ,1,b))
				fwrite(&y,sizeof(int) ,1,ish);
				b_per++;
			}
			while(c_per!=kol_v_gruppah)
			{
				if(fread(&x,sizeof(int) ,1,c))
				fwrite(&x,sizeof(int) ,1,ish);
				c_per++;
			}
	}
}
//******************************************
void dvufaznaya()
{
FILE *a,*b,*c;
int l=1;
while (l<n)
  {
  a=fopen("File.txt","rb");
  b=fopen("File1.txt","wb");
  c=fopen("File2.txt","wb");
  razbienie(a,b,c,l);
  fclose (a);  fclose (b);  fclose (c);
  b=fopen("File1.txt","rb");
  c=fopen("File2.txt","rb");
//  fseek(a,0,0);
  //cout<<"a: ";File_vivod(a);
  cout<<'\n';
  cout<<"b: ";File_vivod(b);
  cout<<"c: ";File_vivod(c);
  fclose (a);
  a=fopen("File.txt","wb");
  fseek(b,0,0);
  fseek(c,0,0);
  sliyanie(a,b,c,l);
  fclose (a);
  a=fopen("File.txt","rb");
  cout<<"a: ";File_vivod(a);
  fclose (b);
  fclose (c);
  fclose (a);
  l=l*2;
  cout<<'\n';
  }
}
проблема в том, что после сортировки массив остается прежним

Последний раз редактировалось Sazary; 23.12.2009 в 17:42.
Evgeshk@ вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Внешняя многофазовая сортировка слиянием... maLoy*508 Общие вопросы Delphi 26 10.05.2011 14:49
Внешняя компонента 1c 8.1 Dunpeal Общие вопросы Delphi 3 05.12.2009 18:12
Внешняя сортировка alex55 Общие вопросы C/C++ 0 21.03.2009 22:15
Внешняя сортировка Ashraf Помощь студентам 1 29.05.2008 08:56