Skip to content

Commit 81dccae

Browse files
committed
Minor reedit;
new topic in readme.md;
1 parent dca6ac8 commit 81dccae

File tree

6 files changed

+46
-77
lines changed

6 files changed

+46
-77
lines changed

Program.cs

Lines changed: 3 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -1,51 +1,9 @@
11
// See https://aka.ms/new-console-template for more information
22

33
using algorithms_cs.Algorithm.Sort.External.Merge;
4-
using algorithms_cs.Tape;
5-
using algorithms_cs.Serial;
64

5+
const int numberWays = 4;
6+
const string pathFile = "E:\\projects\\algorithms-cs\\resource\\1.test";
77

8-
//var b1 = new BufferedTapeReader((string)"E:\\projects\\algorithms-cs\\resource\\1.test");
9-
//var b2 = new BufferedTapeReader((string)"E:\\projects\\algorithms-cs\\resource\\2.test");
10-
//var b3 = new BufferedTapeReader((string)"E:\\projects\\algorithms-cs\\resource\\3.test");
11-
12-
/*
13-
var seriesList = new List<Series>();
14-
15-
seriesList.Add(new Series(b1));
16-
seriesList.Add(new Series(b2));
17-
seriesList.Add(new Series(b3));
18-
19-
var collector = new Collector(seriesList);
20-
21-
SeriesReturn<double> value;
22-
do
23-
{
24-
value = collector.Next();
25-
Console.Write( value.GetType() == SeriesReturnType.Correct ? value.GetValue() + " " : "");
26-
} while (value.GetType() == SeriesReturnType.Correct);
27-
*/
28-
29-
30-
31-
32-
33-
34-
/*var s1 = new Series(b1);
35-
SeriesReturn<double> value;
36-
do
37-
{
38-
do
39-
{
40-
value = s1.Next();
41-
Console.Write(value.GetType());
42-
Console.WriteLine(value.GetValue());
43-
} while (value.GetType() == SeriesReturnType.Correct);
44-
s1 = new Series(b1);
45-
} while (value?.GetType() != SeriesReturnType.TapeEnded);*/
46-
47-
48-
49-
var sort = new MultiwaySort(4, (string)"D:\\coding\\algorithm-cs\\resource\\1.test");
50-
8+
var sort = new MultiwaySort(numberWays, pathFile);
519
sort.Start();

readme.md

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,33 @@ Overview
88
This project is designed to learning **computer science** by [a roadmap](https://roadmap.sh/computer-science).
99

1010

11+
Use
12+
---
13+
14+
For start sorting file create `MultiwaySort()` with 2 parameters such `number of ways` and (`filename` or path file).
15+
Then call `Start()` method.
16+
17+
After sorting is completed, a new file will be created with the same name and postscript `-sorted`.
18+
19+
20+
Example use
21+
-----------
22+
```csharp
23+
using algorithms_cs.Algorithm.Sort.External.Merge;
24+
25+
const int numberWays = 4;
26+
const string pathFile = @"someDirectory\\resource\\1.test";
27+
28+
var sort = new MultiwaySort(NumberWays, PathFile);
29+
sort.Start();
30+
```
31+
32+
```
33+
/1.test 12 4 1 2 -6 12 645 12 54 -2,0001
34+
/1.test-sorted -6 -2,0001 1 2 4 12 12 12 54 645
35+
```
36+
37+
1138
External Multiway Merge Sort
1239
----------------------------
1340

src/Algorithm/Sort/External/Merge/Collector.cs

Lines changed: 5 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -34,9 +34,10 @@ private MinReturn Min()
3434
Index = 0
3535
};
3636

37-
for (int i = 0; i < _bufferSeriesReturns.Count; i++)
37+
for (var i = 0; i < _bufferSeriesReturns.Count; i++)
3838
{
39-
if (_bufferSeriesReturns[i].GetType() == SeriesReturnType.Correct && value > _bufferSeriesReturns[i].GetValue())
39+
if (_bufferSeriesReturns[i].GetType() == SeriesReturnType.Correct
40+
&& value > _bufferSeriesReturns[i].GetValue())
4041
{
4142
value = _bufferSeriesReturns[i].GetValue();
4243
minReturn.Element = _bufferSeriesReturns[i];
@@ -47,15 +48,9 @@ private MinReturn Min()
4748
return minReturn;
4849
}
4950

50-
public bool IsEmpty()
51-
{
52-
return _bufferSeriesReturns.All(x => x.GetType() != SeriesReturnType.Correct);
53-
}
51+
private bool IsEmpty() => _bufferSeriesReturns.All(x => x.GetType() != SeriesReturnType.Correct);
5452

55-
public bool TapeEnded()
56-
{
57-
return _bufferSeriesReturns.All(x => x.GetType() == SeriesReturnType.TapeEnded);
58-
}
53+
public bool TapeEnded() => _bufferSeriesReturns.All(x => x.GetType() == SeriesReturnType.TapeEnded);
5954

6055
public SeriesReturn<double> Next()
6156
{

src/Algorithm/Sort/External/Merge/MergeSort.cs

Lines changed: 6 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@
33

44
namespace algorithms_cs.Algorithm.Sort.External.Merge;
55

6-
76
public class MultiwaySort: Sort
87
{
98
private readonly string _sourceFilePath;
@@ -13,14 +12,15 @@ public class MultiwaySort: Sort
1312
private List<Tape.Tape> _tapes;
1413
private readonly string _templateNameFiles;
1514

16-
1715
public MultiwaySort(int N, string sourceFilePath)
1816
{
1917
if (N <= 1) throw new InvalidDataException("");
2018

2119
_sourceFilePath = sourceFilePath;
20+
2221
var directoryName = Path.GetDirectoryName(_sourceFilePath);
2322
if (directoryName == null) throw new DirectoryNotFoundException();
23+
2424
_tempDirectory = directoryName + "\\temp\\";
2525
_templateNameFiles = _tempDirectory + "tempfile-{0}.multiwaymergesort";
2626
Directory.CreateDirectory(_tempDirectory);
@@ -30,11 +30,11 @@ public MultiwaySort(int N, string sourceFilePath)
3030

3131
var firstFilenames = new List<string>();
3232
var secondFilenames = new List<string>();
33-
for (int i = 0; i < _n; i++)
33+
for (var i = 0; i < _n; i++)
3434
{
3535
firstFilenames.Add(string.Format(_templateNameFiles, i.ToString()));
3636
}
37-
for (int i = _n; i < _n*2; i++)
37+
for (var i = _n; i < _n*2; i++)
3838
{
3939
secondFilenames.Add(string.Format(_templateNameFiles, i.ToString()));
4040
}
@@ -73,12 +73,8 @@ private void InitTapeSplit()
7373
{
7474
var initTape = new BufferedTapeReader(_sourceFilePath);
7575

76-
var tapeWrites = new List<TapeWriter<double>>();
77-
foreach (var filename in _dominoes.WriteFilenames)
78-
{
79-
tapeWrites.Add(new TapeWriter<double>(filename));
80-
}
81-
76+
var tapeWrites = _dominoes.WriteFilenames.Select(filename => new TapeWriter<double>(filename)).ToList();
77+
8278
var indexTape = 0;
8379
if (indexTape >= _n) throw new IndexOutOfRangeException("indexTape out of range tapeWrites");
8480

@@ -128,7 +124,6 @@ private int MainRound()
128124
var writeTapes = new List<TapeWriter<double>>();
129125
if (writeTapes == null) throw new ArgumentNullException(nameof(readTapes));
130126
writeTapes.AddRange(_dominoes.WriteFilenames.Select(filename => new TapeWriter<double>(filename)));
131-
132127

133128
var indexTape = 0;
134129
if (indexTape >= _n) throw new IndexOutOfRangeException("indexTape out of range tapeWrites");

src/Algorithm/Sort/Sort.cs

Lines changed: 1 addition & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,5 @@ namespace algorithms_cs.Algorithm.Sort;
22

33
public abstract class Sort
44
{
5-
protected Sort()
6-
{
7-
8-
}
9-
10-
private void Start()
11-
{
12-
13-
}
5+
protected Sort() { }
146
}

src/Tape/TapeReader.cs

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ private bool ValueIsDigit(int value)
3939
public virtual TapeReturn<double> Next()
4040
{
4141
var token = "";
42-
bool tokenIsNumber = false;
42+
var tokenIsNumber = false;
4343
//_isHaveNumber = IsEnd();
4444

4545
while (!IsEnd)
@@ -54,7 +54,9 @@ public virtual TapeReturn<double> Next()
5454
if (!tokenIsNumber) continue;
5555

5656
// Checking negative or float number or continues digit
57-
tokenIsNumber = ValueIsDigit(currentChar is '.' or ',' or '-' ? nextChar : currentChar);
57+
tokenIsNumber = ValueIsDigit(currentChar is '.' or ',' or '-'
58+
? nextChar
59+
: currentChar);
5860

5961
if (!tokenIsNumber)
6062
{

0 commit comments

Comments
 (0)