private static void merge(int[] array, int idx_s, int idx_e, int idx_m)
	{
		int[] sub_array_1 = new int[idx_m - idx_s + 2]; //include the middle number and one more senital value
		int[] sub_array_2 = new int[idx_e - idx_m + 1]; //include one more senital value
		
		for(int i = 0; i < idx_m - idx_s + 1; i++)
		{
			sub_array_1[i] = array[idx_s + i];
		}
		sub_array_1[idx_m-idx_s + 1] = SENTINAL;

		for(int i = 0; i < idx_e - idx_m; i++)
		{
			sub_array_2[i] = array[idx_m + 1 + i];
		}
		sub_array_2[idx_e - idx_m] = SENTINAL;

		/**
		 *merge
		 */
		int i1 = 0;
		int i2 = 0;
		for(int i = idx_s ; i < idx_e + 1; i++)
		{
			if(sub_array_1[i1] < sub_array_2[i2]){
				array[i] = sub_array_1[i1];
				i1++;
			}else{
				array[i] = sub_array_2[i2];
				i2++;
			}
		}

	}