アルゴリズムのソートアルゴリズムのソート:集計

1142 ワード

//  
	public static void sort4(int[] arr) {
		if (arr == null || arr.length < 2) {
			return;
		}
		sortProcess(arr, 0, arr.length - 1);

	}

	public static void sortProcess(int[] arr, int l, int r) {
		if (l == r) {
			return;
		}
		int mid = (l + r) / 2;
		sortProcess(arr, l, mid);
		sortProcess(arr, mid + 1, r);
		merge(arr, l, mid, r);
	}

	public static void merge(int[] arr, int l, int mid, int r) {
		int arr2[] = new int[r - l + 1];
		int i = 0;
		int p1 = l;
		int p2 = mid + 1;
		while (p1 <= mid && p2 <= r) {
			if (arr[p1] <= arr[p2]) {
				arr2[i++] = arr[p1++];
			} else {
				arr2[i++] = arr[p2++];
			}
		}

		if (p1 > mid) {
			while (p2 <= r) {
				arr2[i++] = arr[p2++];
			}
		} else if (p2 > r) {
			while (p1 <= mid) {
				arr2[i++] = arr[p1++];
			}
		}
		for (i = 0; i < arr2.length; i++) {
			arr[l + i] = arr2[i];
		}
	}