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

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

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > C# (си шарп)
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 18.05.2017, 13:56   #1
fr0st1k123
Пользователь
 
Регистрация: 28.09.2015
Сообщений: 53
По умолчанию Сортировка слиянием из 2-вух файлов

Здравствуйте, требуется помощь)
Есть программа , в котором массив сортируется слиянием из 1 файла и записывается в другой
Код:
using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.IO; 

namespace ConsoleApplication1 
{ 
class Program 
{ 
static void Main(string[] args) 
{ 


string s = Console.ReadLine(); 
StreamReader reader = new StreamReader(s + "TextFile1.txt"); 
string[] split; 
string readLine; 
readLine = reader.ReadLine(); 
split = readLine.Split(' ', '\n'); 
reader.Close(); 
int n = Convert.ToInt32(split.Length); 
long[] arr = new long[n]; 
for (int i = 0; i < n; i++) 
{ 
arr[i] = int.Parse(split[i]); 
} 
Array.Sort<long>(arr); 



StreamWriter sw; 
FileInfo fi = new FileInfo("zero1.txt"); 
for (int i = 0; i < arr.Length; i++) 
{ 
sw = fi.AppendText(); 
sw.Write(arr[i] + " "); 
sw.Close(); 
} 



} 
} 
}
Помогите переделать её так, чтобы массив записанный в файл разбивался на 2 файла и уже тогда начиналась сортировка слиянием ,вот примерно как должна работать программа
Код:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO;

namespace Файловая_сортировка
{
    class Program
    {
        public static void generator(int n)
        {
            StreamWriter sw1 = new StreamWriter("input1.txt");
            Random rnd = new Random();
            for (int i = 0; i < n-1; i++)
            {
               sw1.WriteLine(rnd.Next(-999,999)); 
            };
            sw1.Write(rnd.Next(-999, 999));
            sw1.Close();
        }
        public static void razdel(int p, int n)
        {
            StreamReader sr1 = new StreamReader("output1.txt");
            StreamWriter sw2 = new StreamWriter("output2.txt");
            StreamWriter sw3 = new StreamWriter("output3.txt");
            for (int i = 0; i < n; i++)
            {
                string Value = sr1.ReadLine();
                if ((i / p) % 2 == 0) sw2.WriteLine(Value);
                else sw3.WriteLine(Value);
            };
            sr1.Close();
            sw2.Close();
            sw3.Close();
        }

        public static void sliyanie(int p, int n)
        {
            int a, b;//считываемые числа
            int c, d;//индикаторы очередной пары элементов
            int p1=p, p2;//контрольные 
            int o; //для корректной обработки последнего захода
            StreamWriter sw1 = new StreamWriter("output1.txt");
            StreamReader sr2 = new StreamReader("output2.txt");
            StreamReader sr3 = new StreamReader("output3.txt");
            int i = 0;
            while (sr3.EndOfStream == false)
            {
                a = Int32.Parse(sr2.ReadLine());
                b = Int32.Parse(sr3.ReadLine());
                c = 0;
                d = 0;
                
                if ((i == n / (2 * p)) && (n % (2 * p)!= 0)) { o = n % (2 * p); p2=o%p;}
                else { o = p * 2; p2 = p; }
                do
                {
                    if ((a < b) && (c < p1))
                    {
                        sw1.WriteLine(a);
                        c++;
                        if((c<p1)&&(sr2.EndOfStream==false)) a = Int32.Parse(sr2.ReadLine());
                    }
                    else
                        if (d < p2)
                        {
                            sw1.WriteLine(b);
                            d++;
                            if((d<p2)&&(sr3.EndOfStream==false)) b = Int32.Parse(sr3.ReadLine());
                        }
                        else
                        {
                            sw1.WriteLine(a);
                            c++;
                            if((c<p1)&&(sr2.EndOfStream==false)) a = Int32.Parse(sr2.ReadLine());
                        }
                } while ((c + d) != o);
                i++;
            }
            while (sr2.EndOfStream == false) sw1.WriteLine(Int32.Parse(sr2.ReadLine()));
            sw1.Close();
            sr2.Close();
            sr3.Close();
        }
        static void Main(string[] args)
        {
            int n=100;
            generator(n);
            StreamWriter sw = new StreamWriter("output1.txt");
            StreamReader sr = new StreamReader("input1.txt");
            while (sr.EndOfStream==false)
            {
                string Value=sr.ReadLine();

                sw.WriteLine(Value);    
            }
            sr.Close(); sw.Close();
            for (int p = 1; p < n; p*=2)
            {

                razdel(p, n);
                sliyanie(p, n);
               
            }
        }
    }
}

Последний раз редактировалось fr0st1k123; 18.05.2017 в 13:59.
fr0st1k123 вне форума Ответить с цитированием
Старый 18.05.2017, 15:21   #2
Cuprum5
Форумчанин
 
Регистрация: 09.05.2017
Сообщений: 734
По умолчанию

В чем проблема-то, я не понял. Нужно разбить файл пополам и отсортировать эти 2 файла. В чем проблема? Это же легко сделать.
Напишу программу на C++ и Asm для AVR. Черчение: sergeisky@yahoo.com.

Последний раз редактировалось Cuprum5; 18.05.2017 в 15:37.
Cuprum5 вне форума Ответить с цитированием
Старый 18.05.2017, 15:42   #3
Cuprum5
Форумчанин
 
Регистрация: 09.05.2017
Сообщений: 734
По умолчанию

Цитата:
Сообщение от fr0st1k123 Посмотреть сообщение
Код:
for(int p = 1; p < n; p*=2)
{
    razdel(p, n);
    sliyanie(p, n);               
}
- зачем эти 2 функции вызывать много раз?
Напишу программу на C++ и Asm для AVR. Черчение: sergeisky@yahoo.com.
Cuprum5 вне форума Ответить с цитированием
Старый 18.05.2017, 15:43   #4
fr0st1k123
Пользователь
 
Регистрация: 28.09.2015
Сообщений: 53
По умолчанию

Цитата:
Сообщение от Cuprum5 Посмотреть сообщение
В чем проблема-то, я не понял. Нужно разбить файл пополам и отсортировать эти 2 файла. В чем проблема? Это же легко сделать.
В разбиении проблем нет, нужен код самой сортировки из 2-вух файлов ( Тот, что представлен выше нужно переделать, т.к он был дан для примера
)
fr0st1k123 вне форума Ответить с цитированием
Старый 18.05.2017, 15:44   #5
fr0st1k123
Пользователь
 
Регистрация: 28.09.2015
Сообщений: 53
По умолчанию

Цитата:
Сообщение от Cuprum5 Посмотреть сообщение
- зачем эти 2 функции вызывать много раз?
Код который ниже это не мой его дали для примера
fr0st1k123 вне форума Ответить с цитированием
Старый 18.05.2017, 15:48   #6
Cuprum5
Форумчанин
 
Регистрация: 09.05.2017
Сообщений: 734
По умолчанию

Не понял вообще 2 программу - вообще бред какой-то. В основном из-за того, что выше написал. Зачем задавать p и потом еще в этих функциях что-то мутить, дибо автор этого кода сверхгений, либо он полный дурак. Автор темы, Вам же надо похватать куски кода из этих программ и написать свою программу, сортировку слиянием возьмите лучше с другого какого-нибудь сайта, здесь просто бред какой-то полнейший.
Напишу программу на C++ и Asm для AVR. Черчение: sergeisky@yahoo.com.
Cuprum5 вне форума Ответить с цитированием
Старый 18.05.2017, 15:49   #7
Cuprum5
Форумчанин
 
Регистрация: 09.05.2017
Сообщений: 734
По умолчанию

Цитата:
Сообщение от fr0st1k123 Посмотреть сообщение
самой сортировки из 2-ух файлов
- это как понять?
Напишу программу на C++ и Asm для AVR. Черчение: sergeisky@yahoo.com.
Cuprum5 вне форума Ответить с цитированием
Старый 18.05.2017, 15:51   #8
Cuprum5
Форумчанин
 
Регистрация: 09.05.2017
Сообщений: 734
По умолчанию

Упростите себе задачу, нарисуйте картинку и напишите алгоритм работы.
Напишу программу на C++ и Asm для AVR. Черчение: sergeisky@yahoo.com.
Cuprum5 вне форума Ответить с цитированием
Старый 18.05.2017, 15:55   #9
fr0st1k123
Пользователь
 
Регистрация: 28.09.2015
Сообщений: 53
По умолчанию

Цитата:
Сообщение от Cuprum5 Посмотреть сообщение
- это как понять?
После разбиения файла на 2 при сортировке считываем элемент из F2 и F3 и записываем в F1 и т.д. Это имел ввиду,
fr0st1k123 вне форума Ответить с цитированием
Старый 18.05.2017, 16:00   #10
Cuprum5
Форумчанин
 
Регистрация: 09.05.2017
Сообщений: 734
По умолчанию

Чем готовый код не удовлетворяет?
Напишу программу на C++ и Asm для AVR. Черчение: sergeisky@yahoo.com.
Cuprum5 вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сортировка слиянием двух файлов. recycler Помощь студентам 0 16.05.2012 12:51
Сортировка слиянием C++ PinkPink Помощь студентам 0 05.12.2011 20:07
сортировка слиянием (C++) DarkAltair Помощь студентам 7 11.10.2011 21:12
Сортировка слиянием файлов [MI_nor] Общие вопросы C/C++ 1 01.06.2009 20:56