Merge pull request #27 from mlemanczyk/codex/optimize-multithreading-in-resultsparser

Improve results sorting performance
This commit is contained in:
Marek Lemańczyk authored and GitHub committed 2025-09-19 21:41:36 +02:00
commit 4b4cbf3049
1 file changed
+24 -27
+24 -27
View File
@@ -225,9 +225,9 @@ internal static class Program
return; return;
} }
List<CandidateResult> sortedResults = [.. primeResults]; List<CandidateResult> sortedResults = [.. primeResults];
Console.WriteLine("Sorting candidates..."); Console.WriteLine("Sorting candidates...");
BubbleSort(sortedResults); SortByPrime(sortedResults);
Console.WriteLine("Splitting results..."); Console.WriteLine("Splitting results...");
List<CandidateResult> passedResults = new(sortedResults.Count); List<CandidateResult> passedResults = new(sortedResults.Count);
@@ -323,33 +323,30 @@ internal static class Program
} }
} }
private static void BubbleSort(List<CandidateResult> results) private static void SortByPrime(List<CandidateResult> results)
{ {
if (results.Count < 2) if (results.Count < 2)
{ {
return; return;
} }
int length = results.Count; results.Sort(CandidateResultComparer.Instance);
bool swapped; }
do
{
swapped = false;
for (int i = 1; i < length; i++)
{
if (results[i - 1].P <= results[i].P)
{
continue;
}
(results[i - 1], results[i]) = (results[i], results[i - 1]); private sealed class CandidateResultComparer : IComparer<CandidateResult>
swapped = true; {
} public static readonly CandidateResultComparer Instance = new();
length--; public int Compare(CandidateResult x, CandidateResult y)
} {
while (swapped); if (x.P == y.P)
} {
return 0;
}
return x.P < y.P ? -1 : 1;
}
}
private static void DrainPrimeMatches( private static void DrainPrimeMatches(
List<CandidateResult> pendingResults, List<CandidateResult> pendingResults,