画像処理入門 > ソート > マージソート

マージソート


マージソート
マージソートのプログラムです。

サンプルプログラム
プログラムはこちら 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; } } }