C++でマージソート

マージソートのプログラム。
tmp[10]に作業用のデータを保持している。マージソートでデータと同じくらいの作業の領域が必要。

#include <ctime>
#include <cstdlib>
#include <iostream>
using namespace std;
 
int tmp[10];
void mergesort(int *a, int first, int last){
  if (first>=last)
    return;
  int i, j;
  int middle = (first+last)/2;
  mergesort(a, first, middle);
  mergesort(a, middle+1, last);
  for (i=first; i<=middle; i++)
    tmp[i] = a[i];
  for (i=middle+1, j=last; i<=last; i++, j--)
    tmp[j] = a[i];
  i = first; j = last;
  for (int k=first; k<=last; k++){
    if (tmp[i] >= tmp[j])
      a[k] = tmp[j--];
    else
      a[k] = tmp[i++];
  }
}
 
void print_a(int *a, int n){
  for (int i=0; i<n; i++)
    cout << a[i] << " ";
  cout << endl;
}
 
int main(){
  srand(time(NULL));
  int n=10;
  int a[n];
  for (int i=0; i<n; i++)
    a[i] = rand()%20;
  print_a(a, n);
  mergesort(a, 0, n-1);
  print_a(a, n);
}
 
最終更新:2010年03月08日 18:05
ツールボックス

下から選んでください:

新しいページを作成する
ヘルプ / FAQ もご覧ください。