三区分割クイックソートと挿入ソートのハイブリッド実装
クイックソートは平均計算量が O(n log n) である一方、ピボット選択が悪い場合に最悪 O(n²) に退化する。本稿では、Java で実装可能な高速化テクニックを段階的に紹介する。
1. 単純な二方向分割
ピボットを末尾に固定したまま、slow / fast という2つの走査ポインタを使って「ピボット未満」を左に集める手法。
static void basicQuick(int[] a, int lo, int hi) {
...
7月5日 18:24 投稿
整数配列のソート実装:複数アルゴリズムによる昇順整列化
問題概要
非負とは限らない整数からなる配列 nums が与えられる。この配列を昇順に並べ替える関数を実装する。制約条件として、配列長は最大で 50,000、各要素の値は -50,000 から 50,000 の範囲内である。
基本的なソート手法
バブルソート(改良なし)
隣接する要素を比較し、必要に応じて交換を行うことで、毎回最大値が末尾に移動する。このプロセスを繰り返す。
pub ...
6月14日 23:21 投稿
基本的ソートアルゴリズムと応用問題の実装例
概要
本稿では、競技プログラミングやコーディングテストで頻出する「ソート」を中心とした 4 問の解法を紹介する。各問とも標準的なアルゴリズムを用いることで簡潔に解けるため、実装テクニックを押さえておくと非常に有利である。
問題 1:単純な昇順ソート
問題文
整数列が与えられる。昇順に並べ替えて出力せよ。
解法
要素数が 105 程度であれば、単純な挿入ソート ...
5月18日 14:38 投稿