画像処理入門 >
ソート >
マージソート
マージソート
マージソート
サンプルプログラム
プログラムはこちら
void sortMerge(int *data, int dataNum, int left, int right){
int tmp[DATA_NUM];
int i, j, k;
int middle;
// 配列の要素が1個であればreturn
if(left >= right){
return;
}
middle = (left + right) / 2;
// 左側を再帰
sortMerge(data, dataNum, left, middle);
// 右側を再起
sortMerge(data, dataNum, middle + 1, right);
// data[left] から data[midddle] をtmp領域にコピー
for(i = left; i <= middle; i++){
tmp[i] = data[i];
}
// data[middle + 1] から data[right] を逆順でtmp領域にコピー
for(i = middle + 1, j = right; i <= right; ++i, --j){
tmp[i] = data[j];
}
i = left;
j = right;
// ソート
for (k = left; k <= right; k++){
if(tmp[i] <= tmp[j]){
data[k] = tmp[i];
++i;
} else {
data[k] = tmp[j];
--j;
}
}
}