QuickSort C#を埋める.NETのソースコード
QuickSort C# .NETのソースコード
次はQuickSort C#です.NETサンプルアプリケーションの完全なソースコード.これらのコードをコピー、使用、配布できます(著作権料なし).これらのソースコードは「そのまま」提供され、保証されません.
次はQuickSort C#です.NETサンプルアプリケーションの完全なソースコード.これらのコードをコピー、使用、配布できます(著作権料なし).これらのソースコードは「そのまま」提供され、保証されません.
//// QuickSort C# .NET Sample Application// Copyright 2001-2002 Microsoft Corporation. All rights reserved.//// MSDN ACADEMIC ALLIANCE [http://www.msdn.microsoft.com/academic]// This sample is part of a vast collection of resources we developed for// faculty members in K-12 and higher education. Visit the MSDN AA web site for more!// The source code is provided "as is" without warranty.//// Import namespacesusing System;using System.Collections;using System.IO;// Declare namespacenamespace MsdnAA{ // Declare application class class QuickSortApp { // Application initialization static void Main (string[] szArgs) { // Print startup banner Console.WriteLine ("
QuickSort C#.NET Sample Application"); Console.WriteLine ("Copyright (c)2001-2002 Microsoft Corporation. All rights reserved.
"); Console.WriteLine ("MSDN ACADEMIC ALLIANCE [http://www.msdnaa.net/]
"); // Describe program function Console.WriteLine ("This example demonstrates the QuickSort algorithm by reading an input file,"); Console.WriteLine ("sorting its contents, and writing them to a new file.
"); // Prompt user for filenames Console.Write ("Source: "); string szSrcFile = Console.ReadLine (); Console.Write ("Output: "); string szDestFile = Console.ReadLine (); // Read contents of source file string szSrcLine; ArrayList szContents = new ArrayList (); FileStream fsInput = new FileStream (szSrcFile, FileMode.Open, FileAccess.Read); StreamReader srInput = new StreamReader (fsInput); while ((szSrcLine = srInput.ReadLine ()) != null) { // Append to array szContents.Add (szSrcLine); } srInput.Close (); fsInput.Close (); // Pass to QuickSort function QuickSort (szContents, 0, szContents.Count - 1); // Write sorted lines FileStream fsOutput = new FileStream (szDestFile, FileMode.Create, FileAccess.Write); StreamWriter srOutput = new StreamWriter (fsOutput); for (int nIndex = 0; nIndex < szContents.Count; nIndex++) { // Write line to output file srOutput.WriteLine (szContents[nIndex]); } srOutput.Close (); fsOutput.Close (); // Report program success Console.WriteLine ("
The sorted lines have been written to the output file.
"); } // QuickSort implementation private static void QuickSort (ArrayList szArray, int nLower, int nUpper) { // Check for non-base case if (nLower < nUpper) { // Split and sort partitions int nSplit = Partition (szArray, nLower, nUpper); QuickSort (szArray, nLower, nSplit - 1); QuickSort (szArray, nSplit + 1, nUpper); } } // QuickSort partition implementation private static int Partition (ArrayList szArray, int nLower, int nUpper) { // Pivot with first element int nLeft = nLower + 1; string szPivot = (string) szArray[nLower]; int nRight = nUpper; // Partition array elements string szSwap; while (nLeft <= nRight) { // Find item out of place while (nLeft <= nRight && ((string) szArray[nLeft]).CompareTo (szPivot) <= 0) nLeft = nLeft + 1; while (nLeft <= nRight && ((string) szArray[nRight]).CompareTo (szPivot) > 0) nRight = nRight - 1; // Swap values if necessary if (nLeft < nRight) { szSwap = (string) szArray[nLeft]; szArray[nLeft] = szArray[nRight]; szArray[nRight] = szSwap; nLeft = nLeft + 1; nRight = nRight - 1; } } // Move pivot element szSwap = (string) szArray[nLower]; szArray[nLower] = szArray[nRight]; szArray[nRight] = szSwap; return nRight; } }}