マージソートの実装

今日調べ物してきずいたんですが、
マージソートjavaの実装例が少なすぎる。
ソートの中ではローカルかも知れんけど、
実装しようぜ(←ってか貴様がつくれってな)

ってなぁわけで作りました。
マージソートの基本概要とかはググッてくさださい。
多分むっちゃヒットします。

class Merge {
	public static void main(String[] args) {
		int[] elements = { 9, 4, 3, 1, 5, 6, 7, 2, 8 };
		sort(elements);
		for (int i = 0; i < elements.length; i++) {
			System.out.print(elements[i]);
		}
	}

	/**
	 * いきなりdivideよんだら変数名が矛盾するから作ったメソッド
	 * @param elements
	 */
	public static void sort(int ...elements) {
		divide(elements);
	}
	/**
	 * 配列を分割する
	 * @param elements
	 */
	private static void divide(int ...elements) {
		//要素が2つないと分割しない
		if (elements.length > 1) {
			//配列中央から配列先頭までの配列を作成する
			int center = elements.length / 2;
			int[] left = new int[center];
			for (int i = 0; i < center; i++) {
				left[i] = elements[i];
			}
			
			//配列中央より配列後尾までの配列を作成する
			int hearf = elements.length - center;
			int[] right = new int[hearf];
			for (int i = 0; i < hearf; i++) {
				right[i] = elements[center + i];
			}
			
			/* 分割できなくなるまで再帰的に処理する */
			divide(left);
			divide(right);
			compare(left, right, elements);
		}
	}
	/**
	 * 配列を比較する
	 * @param left
	 * @param right
	 * @param elements
	 */
	private static void compare(int[] left, int[] right, int[] elements) {
		int i = 0; 
		int j = 0;
		
		while (i < left.length || j < right.length) {
			if (judge(i,j,left,right)) {
				elements[i + j] = left[i];
				i++;
			} else {
				elements[i + j] = right[j];
				j++;
			}
		}
	}

	/**
	 * ジャッジ用メソッドなので特に深い意味はないんです。
	 * @param iCount
	 * @param jCount
	 * @param left
	 * @param right
	 * @return
	 */
	private static boolean judge(int iCount, int jCount, int[] left, int[] right) {
		return jCount >= right.length || (iCount < left.length && left[iCount] < right[jCount]);
	}
}

あのぉ、変数に「a」とかたまにクラス名に「a」とかつける人いるけど、
撲滅しましょう
damePGは撲滅運動に参加します。
まったく変数が何を意味しているのかわからくなるので・・・・。
結構ググッたソースコードとかに多いような気がしてならん
(↑とかいいながら僕がまったくできてないですけど・・・)
最近思うのは変数名のつけ方で、その人のコーディングレベルが
少し見えるような気がします。
先輩とかすごい上手やし、変数名メソッド名見ただけでどんな処理なのかすぐに分かる。
最高にかっこいいっす
とかたまに愚痴ってみたりもしつつ、
結婚式(連れの)落ち着いたらアプリいっぱい作成します。