マージソートのプログラム。
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