!!!マージソート [VC++.NET]{{category ロジック}} VC++.NET 2005 using namespace System; using namespace System::Collections; static void marge( array^ ary, array^ ary1, array^ ary2 ) { int i = 0; int j = 0; int k = 0; while(i < ary1->Length && j < ary2->Length ) { if ( ary1[i]->CompareTo(ary2[j]) < 0 ) { ary[k++] = ary1[i++]; } else { ary[k++] = ary2[j++]; } } while(i < ary1->Length ) { ary[k++] = ary1[i++]; } while(j < ary2->Length ) { ary[k++] = ary2[j++]; } } static void margeSort( array^ ary ) { if (ary->Length > 1) { int m = ary->Length / 2; int n = ary->Length - m; array^ a1 = gcnew array(m); array^ a2 = gcnew array(n); for (int i=0; i^ ary ) { margeSort(ary); } static void print( array^ ary ) { for (int i=0; iLength; i++) { Console::WriteLine(ary[i]); } } int main(array ^args) { String^ line; IList^ list = gcnew ArrayList(); while ( (line = Console::ReadLine()) != nullptr ) { list->Add(line); } array^ ary = gcnew array(list->Count); list->CopyTo(ary, 0); sort(ary); print(ary); return 0; }