public int minMoves2(int[] nums) {
int median = quickSelect(nums, 0, n - 1, n/2);
moves += Math.abs(num - median);
public int quickSelect(int[] nums, int start, int end, int k) {
int pivot = partition(nums, start, end);
return quickSelect(nums, pivot + 1, end, k);
return quickSelect(nums, start, pivot - 1, k);
public int partition(int[] nums, int start, int end) {
int mid = start + (end - start) / 2;
for (int i = start; i < end; i++) {
if (nums[i] < nums[end]) {
public void swap(int[] nums, int i, int j) {