public static long bucketSort(int[] array) {
		long t1 = new Date().getTime();
		int len = array.length;
		int bucketNum = (int) Math.sqrt(len) + 1;// Ͱ
		// ˴+1ʾͰĵ0λbucket[no][0]ʾͰԪظ
		int[][] bucket = new int[bucketNum][bucketNum + 1];
		// ʼͰеԪظΪ0
		for (int i = 0; i < bucketNum; i++) {
			bucket[i][0] = 0;
		}
		int left = 1, right = 0, mid = 0, no = 0;
		// еŵͰ
		for (int i = 0; i < len; i++) {
			// λһͰ
			// len˴ʾеֵ,array[i]-1ʾ0ʼ
			// ĿǷֹռһͰɲҪ˷
			no = (array[i] - 1) * bucketNum / len;
			// ͰݣöֲҶλٽֱӲ룩,
			left = 1;
			right = bucket[no][0];
			while (left <= right) {
				mid = left + (right - left) / 2;
				if (array[i] < bucket[no][mid]) {
					right = mid - 1;
				} else {
					left = mid + 1;
				}
			}
			for (int k = bucket[no][0]; k >= left; k--) {
				swap(bucket[no], k, k + 1);
			}
			bucket[no][left] = array[i];
			bucket[no][0]++;
		}
		// ͰеηŻصarray
		int index = 0;
		for (int i = 0; i < bucketNum; i++) {
			for (int j = 1; j <= bucket[i][0]; j++) {
				array[index++] = bucket[i][j];
			}
		}
		long t2 = new Date().getTime();
		return t2 - t1;
	}