最初からソートした2つの配列を1つにする答えをもらえれば,及第点ではあるが,以下のようにソートされていない1つの配列を文字通りソートするアルゴリズムの答えであれば,満点である
.
#include <iostream> #include <array> #include <cmath> using namespace std; #define ARRAY_SIZE 8 void init(array<int,ARRAY_SIZE>& a) { a[0] = 10; a[1] = 5; a[2] = 3; a[3] = 6; a[4] = 6; a[5] = 9; a[6] = 15; a[7] = 1; } void dump(array<int,ARRAY_SIZE>& a) { for( int i =0;i < a.size();i++ ) cout << a.at(i) << ' '; cout << endl; } void mergesort(array<int,ARRAY_SIZE>& arr) { int divider = 2; int compartment; int t; while( divider <= ARRAY_SIZE ) { compartment = ARRAY_SIZE / divider; for( int i = 0;i < compartment;i++ ) { for( int j = i * divider;j < divider;j++ ) { for( int k = j + 1;k < divider;k++ ) { if( arr[j] > arr[k] ) { t = arr[j]; arr[j] = arr[k]; arr[k] = t; } } } } divider *= 2; } } int main() { array<int,ARRAY_SIZE> arr; init(arr); dump(arr); mergesort(arr); dump(arr); }
実行結果は以下の通り
10 5 3 6 6 9 15 1 1 3 5 6 6 9 10 15
0 件のコメント:
コメントを投稿