N個のデータが,配列 a[0]〜 a[N-1]に格納されているとする.
マージソート:
作業用に配列 w[] を使用する場合
marge_sort(a, left, right) {
center = (left+right+1)/2;
if(left < center-1) marge_sort(a, left, center-1);
if(center < right) marge_sort(a, center, right);
(a[left]〜a[center-1])と(a[center]〜a[right])を統合する;
}
(a[left]〜a[center-1])と(a[center]〜a[right])を統合する :
a[p] = w[l];
if( l < center-1 ) l++;
else w[l] = w[right]+1;
w[l] > w[r] ならば,w[r]を取り出す以下の操作を行う
a[p] = w[r];
if( r > right) r++;
else w[r] = w[center-1]+1;
(a[left]〜a[c-1])と(a[c]〜a[right])をマージする
do {
if(a[left] > a[c]) {
t = a[c];
for(p=c; p>left; p--) {
a[p] = a[p-1];
}
c++;
a[left] = t;
}
left++;
} while( (l < r) & (r <= right) );